package com.binod.customviewtest;
import Android.content.Context;
import Android.view.LayoutInflater;
import Android.widget.RelativeLayout;
public class CustomView extends RelativeLayout{
public CustomView(Context context) {
super(context);
// TODO Auto-generated constructor stub
// LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater mInflater = LayoutInflater.from(context);
mInflater.inflate(R.layout.custom_view , this, true);
}
}
含む
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.binod.customviewtest.CustomView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
></com.binod.customviewtest.CustomView>
</RelativeLayout>
カスタムビューとして
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/hello_world" />
</RelativeLayout>
新しいカスタムビューの追加を開始しましたが、一度エラーが発生しました
「原因:Android.view.InflateException:Binary XML file line#1:Error inflating class」がクラッシュします
さらに2つのコンストラクターが必要です。理由を知るために
Androidカスタムビュー?)の3つのコンストラクターすべてが必要ですか?
public class CustomView extends RelativeLayout{
LayoutInflater mInflater;
public CustomView(Context context) {
super(context);
mInflater = LayoutInflater.from(context);
init();
}
public CustomView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mInflater = LayoutInflater.from(context);
init();
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
mInflater = LayoutInflater.from(context);
init();
}
public void init()
{
View v = mInflater.inflate(R.layout.custom_view, this, true);
TextView tv = (TextView) v.findViewById(R.id.textView1);
tv.setText(" Custom RelativeLayout");
}
}
例を投稿しています。パッケージ名が異なります
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<com.example.testall.CustomView
Android:id="@+id/timer1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
/>
</RelativeLayout>
custom_view.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<TextView
Android:id="@+id/textView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="60dp"
Android:text="My Custom View" />
</RelativeLayout>
MainActivity.Java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
スナップ
Pskinkが示唆したように、activity_main.xml
のRelativeLayoutで子CustomViewを使用します。次に、CustomViewがRealtiveLayoutを拡張し、RelativeLayoutと子TextViewでカスタムビューを再度膨らませます。これらすべての必要はありません。ただのCustomView。 TextViewをプログラムで作成してから、textviewをRelativeLayoutに追加します
編集:
activity_main.xml
<com.example.testall.CustomView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/timer1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
CustomView
public class CustomView extends RelativeLayout{
TextView tv;
public CustomView(Context context) {
super(context);
tv = new TextView(context);
init();
}
public CustomView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
tv = new TextView(context);
init();
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
tv = new TextView(context);
init();
}
public void init()
{
this.addView(tv);
tv.setText(" Custom RelativeLayout");
}
}
アクティビティを取得してこれを使用してみてください
{
LayoutInflater inflter = activity.getLayoutInflater();
View v = inflter.inflate(R.layout.custom_view,null);
this.addView(v); or addView(v);
}