如何在我的布局中膨胀textview xml?

时间:2014-02-01 16:18:52

标签: android android-layout

我创建了一个自定义textview类,我试图在我的主xml中对它进行充气。这是我的代码: -

public class CustomTextView extends TextView{

public CustomTextView(Context context) {
    super(context);
    LayoutInflater li = LayoutInflater.from(context);
    TextView view = (TextView) li.inflate(R.layout.customtextview,null);
    view.setBackgroundColor(Color.RED);
}

}

customtextview.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:text="sgfiughbjkh"
    android:id="@+id/customtext"
    android:layout_height="match_parent" >

</TextView>

在我的主要活动xml中,我只有一个线性布局: -

    LinearLayout main = (LinearLayout)findViewById(R.id.mainView);
    CustomTextView cus = new CustomTextView(this);
    main.addView(cus);

我知道如果我将它扩展为线性布局而不是textview并添加lienarlayout作为父级,并且在textview中,它可以工作。

但问题是我想用一个textview来膨胀一个xml并给它充气并且上面的代码不起作用。 请建议

如何使用布局充气程序对仅包含一个文本视图的xml进行充气?

4 个答案:

答案 0 :(得分:3)

它已经过时了,两年后,我遇到了同样的问题。

您无法从视图扩展并从布局中扩展。视图需要由ViewGroup包装。阅读Understanding Android's LayoutInflater.inflate()

我想出了两个解决方案:

您的类CustomTextView中的

1。,您以编程方式设置所有属性。不要膨胀任何东西。祝您从资源转换dimen.xml

2。在您的活动中,夸大Textview

LinearLayout main = (LinearLayout)findViewById(R.id.mainView);
TextView textView = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.customtextview, null);
// you might need as well to set the layout params again
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
// textView.setLayoutParams(params);

main.addView(textView);

答案 1 :(得分:2)

// inflate text view
    TextView textView =  (TextView) getLayoutInflater().inflate(R.layout.customtextview, null);

// add it to your view
// in your condition, we will add it to Linear Layout
  LinearLayout main = (LinearLayout)findViewById(R.id.mainView);
  main.addView(textView);

答案 2 :(得分:1)

有点晚,但也许会帮助别人。

首先,像Pratik goyal说你需要声明你的CustomTextView而不是TextView

<com.example.CustomTextView
    android:id="@+id/customTextView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

然后在CustomTextView类中,您需要拥有这些行(构造函数):

public FontFitTextView(final Context context) {
    super(context);

}

public FontFitTextView(final Context context, final AttributeSet attrs) {
    super(context, attrs);

}

最后(如果我错了,请纠正我),但是你不能将customView扩展到TextView。

TextView textView =(TextView)getLayoutInflater()。inflate(R.layout.customtextview,null);

而是需要将R.layout.customTextView放入customTextView

CustomTextView customTxtView = (CustomTextView) getLayoutInflater().inflate(R.layout.customlayout, null);

现在我写下来了,我认为不可能只对TextView进行充气。如果你想膨胀R.layout.customlayout,你需要至少有一个布局(线性,相对等......)来包装你的customTextView

像这样的东西

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.yourpakagename.CustomTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView"
    android:layout_centerInParent="true"
    android:includeFontPadding="false"
    android:text="13" />

</RelativeLayout>

答案 3 :(得分:0)

您可以在Eclipse的图形界面中的标题“自定义和库视图”下找到所有自定义创建的视图。

如果您的CustomTextView位于“com.example”包中,那么您可以将自定义组件定义为:

<com.example.CustomTextView
    android:id="@+id/customTextView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>