[解決済み] LayoutInflater は、私が指定した layout_width と layout_height レイアウトパラメータを無視するのはなぜですか?
質問
LayoutInflater を期待通りに動作させるのに大変苦労していますし、他の人もそうでした。 layoutinflator を使って実行時にビューを追加するには? .
LayoutInflater は、なぜ私が指定したレイアウト パラメータを無視するのですか?例:なぜ
layout_width
と
layout_height
の値は尊重されないのですか?
どうすればいいですか?
を参考に、この問題を調査してみました。
LayoutInflater ドキュメント
を作成し、小さなサンプルデモプロジェクトを立ち上げました。次のチュートリアルでは、レイアウトに動的にデータを入力する方法について説明します。
LayoutInflater
.
始める前に
LayoutInflater.inflate()
のパラメータはどのように見えるでしょうか。
-
リソース
: 読み込むべきXMLレイアウトリソースのID(例.
R.layout.main_page
) -
ルート
: 生成された階層の親となるオプションのビュー (もし
attachToRoot
はtrue
のセットを提供するオブジェクトです。LayoutParams
の値は、返された階層のルートに対するものです (もしattachToRoot
はfalse
.) -
アタッチトゥルート : 膨張した階層をrootパラメータにアタッチするかどうか?false の場合、root は正しいサブクラスを作成するためにのみ使用されます。
LayoutParams
をXMLのルートビューのために使用します。 -
戻り値 : 膨張した階層のルート View。root が指定され
attachToRoot
はtrue
それ以外の場合は,XMLファイルのルートとなる.
それでは、レイアウトとコードのサンプルをご覧ください。
メインレイアウト(
main.xml
):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
このコンテナに追加された別のTextViewは、XMLからレイアウトパラメータが正常に適用された場合、小さな赤い四角で表示されます(
red.xml
):
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="25dp"
android:layout_height="25dp"
android:background="#ff0000"
android:text="red" />
現在
LayoutInflater
は、コールパラメータのいくつかのバリエーションで使用されます
public class InflaterTest extends Activity {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup parent = (ViewGroup) findViewById(R.id.container);
// result: layout_height=wrap_content layout_width=match_parent
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view);
// result: layout_height=100 layout_width=100
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view, 100, 100);
// result: layout_height=25dp layout_width=25dp
// view=textView due to attachRoot=false
view = LayoutInflater.from(this).inflate(R.layout.red, parent, false);
parent.addView(view);
// result: layout_height=25dp layout_width=25dp
// parent.addView not necessary as this is already done by attachRoot=true
// view=root due to parent supplied as hierarchy root and attachRoot=true
view = LayoutInflater.from(this).inflate(R.layout.red, parent, true);
}
}
パラメータを変化させた実際の結果は、コードに記録されています。
SYNOPSIS:
呼び出し
LayoutInflater
rootを指定しない場合、XMLのレイアウトパラメータを無視したinflateコールが発生する。ルートが等しくない状態で inflate を呼び出すと
null
と
attachRoot=true
はレイアウトパラメータをロードしますが、ルートオブジェクトを再び返すので、ロードされたオブジェクトに対してそれ以上レイアウトを変更することはできません(
findViewById()
).
したがって、あなたが最も使いたい呼び出し規則は、このようなものです。
loadedView = LayoutInflater.from(context)
.inflate(R.layout.layout_to_load, parent, false);
レイアウトの問題を解決するために レイアウトインスペクター を強くお勧めします。
関連
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
android E/RecyclerView﹕ アダプタが接続されていないため、レイアウトをスキップする。
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
android:EMSのプロパティ
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
Android ProgressBarのスタイルカラーを変更する
-
Androidカスタムドロップダウンリストボックスコントロール
-
アンドロイドの遅延実行のいくつかの方法
-
android.content.ActivityNotFoundException を解決します。Intent問題を処理するActivityが見つからない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
アンドロイドシェイプ、グラデーション、角丸、ボーダーラインの設定
-
アンドロイドにおけるトークンの利用