AndroidのLayoutInflater
本文はCSDNブログから来て、転載して出典を明記してください:http://blog.csdn.net/ghd2000/archive/2010/05/11/5579930.aspx
皆さん、こんにちは.私たちはLayoutInflaterの使用について話しています.実際に開発されたLayoutInflaterというクラスは非常に役に立ちます.findViewById()に似ています.違いはLayoutInflaterがlayoutの下でxmlレイアウトファイルを探してインスタンス化することです.findView ById()は、特定のxmlの下にある特定のwidgetコントロール(Button、TextViewなど)を探します.皆さんに分かりやすくするために簡単なデモを作りました.メインレイアウトmain.xmlにはTextViewとButtonがあります.ButtonをクリックするとDialogが表示されます.このDialogのレイアウトはlayoutディレクトリの下で定義したcustom_です.dialog.xmlファイル(中は左右に分布し、左はImageView、右はTextView).
Demoの実装手順について詳しく説明します.
1
Androidプロジェクトを新設し、LayoutInflaterDemoと名付けました.
2
、mainを修正します.xmlレイアウトは、主に元のベースにButtonを追加しました.コードは次のとおりです.
3
.ダイアログボックスのレイアウトを定義し、layoutディレクトリの下にcustom_という名前を新規作成します.dialog.xmlファイルの具体的なコードは以下の通りです.
4
・メインプログラムの変更JAvaコードは次のとおりです.
5
、最後に実行し、Buttonをクリックすると、上記の効果が得られます.次は「http://www.cnblogs.com/tt_mc/archive/2010/05/28/1746307.html”
一般的に、私たちはLayoutInflaterで一つのことをします:inflate.inflateという方法は全部で4つの形式があり,xmlで記述されたlayoutをViewに変換することを目的としている.This class is used to instantiate layout XML file into its corresponding View objects . It is never be used directly -- use getLayoutInflater() or getSystemService(String)getLayoutInflater() or getSystemService(String) to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on
1. Context.public abstract Object getSystemService (String name) :Return the handle to a system-level service by name. The class of the returned object varies by the requested name. 詳細については、ドキュメントを参照してください.
2.LayoutInflaterを得るための2つの方法
(1)システムサービスによる取得
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
(2)与えられたcontextから取得
(3)両者の違い:実質は同じで、ソースコードを見てください
Javaコード
3. LayoutInflater.inflate()
LayoutファイルをViewに変換し、その名の通りLayout専用のInflaterを使用します.LayoutもViewのサブクラスですが、androidではxmlのLayoutをViewに変換して入れたい場合があります.JAvaコードでの操作は、次のコードを参照してください.次のドキュメントを見てください.
Xmlコード
linearLayout.addView(place_type_text);
これは実行可能で、この上のxmlでは、LinearLayoutはLayoutの代表ではなく、普通のViewにすぎません.
4.findViewByIdには2つの形式がある
R.layout.xxはres/layout/xxを参照します.xmlのレイアウトファイル(inflateメソッド)、R.id.xxはレイアウトファイルのコンポーネントを参照し、コンポーネントのidはxx...(findViewByIdメソッド).R.javaプロファイルを見てみましょう.Rはファイルを分類管理し、layout.をいくつか書きます.xml後、すべてのコンポーネントidはR.id.xxで表示できますが、コンポーネントはsetContentView()のlayoutでは使用できません.Activity.findView ById()に空のポインタ異常が発生します.
以下にまとめます.
View layout = inflater.inflate(R.layout.custom_dialog,null);中のパラメータはレイアウトファイルの名前です.
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.placeslist_linearlayout);lのパラメータは空間id名です.
皆さん、こんにちは.私たちはLayoutInflaterの使用について話しています.実際に開発されたLayoutInflaterというクラスは非常に役に立ちます.findViewById()に似ています.違いはLayoutInflaterがlayoutの下でxmlレイアウトファイルを探してインスタンス化することです.findView ById()は、特定のxmlの下にある特定のwidgetコントロール(Button、TextViewなど)を探します.皆さんに分かりやすくするために簡単なデモを作りました.メインレイアウトmain.xmlにはTextViewとButtonがあります.ButtonをクリックするとDialogが表示されます.このDialogのレイアウトはlayoutディレクトリの下で定義したcustom_です.dialog.xmlファイル(中は左右に分布し、左はImageView、右はTextView).
Demoの実装手順について詳しく説明します.
1
Androidプロジェクトを新設し、LayoutInflaterDemoと名付けました.
2
、mainを修正します.xmlレイアウトは、主に元のベースにButtonを追加しました.コードは次のとおりです.
view plaincopy to clipboardprint?
<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ShowCustomDialog"
/>
</LinearLayout>
3
.ダイアログボックスのレイアウトを定義し、layoutディレクトリの下にcustom_という名前を新規作成します.dialog.xmlファイルの具体的なコードは以下の通りです.
view plaincopy to clipboardprint?
<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
>
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dp"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFF"
/>
</LinearLayout>
4
・メインプログラムの変更JAvaコードは次のとおりです.
view plaincopy to clipboardprint?
package com.android.tutor;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class LayoutInflaterDemo extends Activity implements
OnClickListener {
private Button button;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
showCustomDialog();
}
public void showCustomDialog()
{
AlertDialog.Builder builder;
AlertDialog alertDialog;
Context mContext = LayoutInflaterDemo.this;
//
////LayoutInflater inflater = getLayoutInflater();
LayoutInflater inflater = (LayoutInflater)
mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,null);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello, Welcome to Mr Wei's blog!");
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.icon);
builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();
alertDialog.show();
}
}
5
、最後に実行し、Buttonをクリックすると、上記の効果が得られます.次は「http://www.cnblogs.com/tt_mc/archive/2010/05/28/1746307.html”
一般的に、私たちはLayoutInflaterで一つのことをします:inflate.inflateという方法は全部で4つの形式があり,xmlで記述されたlayoutをViewに変換することを目的としている.This class is used to instantiate layout XML file into its corresponding View objects . It is never be used directly -- use getLayoutInflater() or getSystemService(String)getLayoutInflater() or getSystemService(String) to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on
1. Context.public abstract Object getSystemService (String name) :Return the handle to a system-level service by name. The class of the returned object varies by the requested name. 詳細については、ドキュメントを参照してください.
2.LayoutInflaterを得るための2つの方法
(1)システムサービスによる取得
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
(2)与えられたcontextから取得
(3)両者の違い:実質は同じで、ソースコードを見てください
Javaコード
public static LayoutInflater from(Context context) {
LayoutInflater LayoutInflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (LayoutInflater == null) {
throw new AssertionError("LayoutInflater not found.");
}
return LayoutInflater;
}
public static LayoutInflater from(Context context) {
LayoutInflater LayoutInflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (LayoutInflater == null) {
throw new AssertionError("LayoutInflater not found.");
}
return LayoutInflater;
}
3. LayoutInflater.inflate()
LayoutファイルをViewに変換し、その名の通りLayout専用のInflaterを使用します.LayoutもViewのサブクラスですが、androidではxmlのLayoutをViewに変換して入れたい場合があります.JAvaコードでの操作は、次のコードを参照してください.次のドキュメントを見てください.
Xmlコード
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout android:id="@+id/placeslist_linearlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout android:id="@+id/placeslist_linearlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
LinearLayout linearLayout
= (LinearLayout) findViewById(R.id.placeslist_linearlayout); linearLayout.addView(place_type_text);
これは実行可能で、この上のxmlでは、LinearLayoutはLayoutの代表ではなく、普通のViewにすぎません.
4.findViewByIdには2つの形式がある
R.layout.xxはres/layout/xxを参照します.xmlのレイアウトファイル(inflateメソッド)、R.id.xxはレイアウトファイルのコンポーネントを参照し、コンポーネントのidはxx...(findViewByIdメソッド).R.javaプロファイルを見てみましょう.Rはファイルを分類管理し、layout.をいくつか書きます.xml後、すべてのコンポーネントidはR.id.xxで表示できますが、コンポーネントはsetContentView()のlayoutでは使用できません.Activity.findView ById()に空のポインタ異常が発生します.
以下にまとめます.
View layout = inflater.inflate(R.layout.custom_dialog,null);中のパラメータはレイアウトファイルの名前です.
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.placeslist_linearlayout);lのパラメータは空間id名です.