自定义线性布局

时间:2013-05-05 14:44:20

标签: java android android-layout android-custom-view

我正在尝试创建自己的LinearLayout以使其可重用且模块化。 首先我的代码看起来像这样,工作正常:

mLlHeader = (LinearLayout)view.findViewById(R.id.ll_header);
        mTvCrump = new TextView(mContext);
        mTvCrump.setText("> "+((Item) mNavigationHistory.get(mNavigationHistory.size()-1)).getName());
        mTvCrump.setId(mNavigationHistory.size()-1);
        mTvCrump.setClickable(true);
        mTvCrump.setOnClickListener(mBreadcrumpListener);
        mBreadcrump.add(mTvCrump);
        mLlHeader.addView(mTvCrump,mNavigationHistory.size()-1);

现在我想创建我自己的LinearLayout类:

public class Breadcrump extends LinearLayout {

    private List<? super Item> mNavigationHistory = new ArrayList<Item>();
    private List<TextView> mElements = new ArrayList<TextView>();

    public Breadcrump(Context context) {
        super(context);
    }

    public Breadcrump(Context context, AttributeSet attrs) {
    super(context, attrs);
}

    public void addElement (String name) {

    }

}

我的xml看起来像这样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/cell_selected"
    android:gravity="left"
    android:orientation="vertical"
    android:padding="5dp" >

      <com.client.views.Breadcrump
        android:id="@+id/ll_breadcrump"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" /> 
</LinearLayout>

并像这样使用它:

mLlHeader = (Breadcrump)view.findViewById(R.id.ll_breadcrump);
....

修改

我现在在布局xml文件中添加了命名空间,其中我使用自定义视图和视图类中具有属性集的新构造函数。现在应用程序启动了。但它只显示我的自定义视图,其余布局是白色的?

1 个答案:

答案 0 :(得分:2)

在你的布局XML文件中,你可能有这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_header"
    ... />

尝试将其更改为

<?xml version="1.0" encoding="utf-8"?>
<com.client.views.Breadcrump
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_header"
    ... />

编辑:如何在您的活动中使用它?

如果您的XML布局文件名为 main.xml ,则只需在活动的setContentView(R.layout.main)方法中调用onCreate()即可。您的Breadcrump在内部初始化。然后,您可以使用(Breadcrump)view.findViewById(R.id.ll_header)获取对它的引用。