0

我想通过扩展一个 LinearLayout 从一堆控件创建一个复合视图。我正在使用 XML 文件来指定自定义控件的内部布局。我正在通过LayoutInflater.

问题是:

如果我将根LinearLayout元素替换merge为 XML 中的元素,我的整个布局就会崩溃。如果我不这样做,那么我只LinearLayout用我的自定义封装了一个。

问题是:

我必须在合并布局中更改什么,所以我的视图看起来像线性布局应该如何?

它的样子:

LinearLayout(这就是我希望它的样子): http:
//oi45.tinypic.com/2pqwby1.jpg

使用merge(这是我要使用的标签):http:
//i45.tinypic.com/155j4o0.png

编码:

TowerLayout.java(这里没有问题,以防万一):

public class TowerLayout extends LinearLayout implements OnClickListener {

    public TowerLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.tower_layout, this, true); //this is what i want to use.
        //((LinearLayout)findViewById(R.id.root)).setOnClickListener(this); //this is the current ugly workaround.
        this.setClickable(true);
        setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(getContext(), "Foo", Toast.LENGTH_SHORT).show();
    }
}

我在 Tower_Layout.xml 中有什么:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:duplicateParentState="true">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="TowerA"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:duplicateParentState="true"
        android:textSize="32sp" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.28"
        android:duplicateParentState="true"
        android:src="@drawable/icon" />

</LinearLayout>

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Basic information"
    android:duplicateParentState="true"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_marginLeft="15dip"
    android:layout_height="wrap_content"
    android:duplicateParentState="true"
    android:text="Lorem ipsum dolor sit amet, consectetuer adipiscing elit." />

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:duplicateParentState="true"
    android:text="16m"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textSize="100sp" />

我在 Tower_Layout.xml 中想要什么:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:duplicateParentState="true">

    ...

</LinearLayout>

...

</merge>

还有一件事:

我知道,截图来自 Eclipse 设计师,但相信我:它们在安卓手机上也是这样的。

4

1 回答 1

1

android:orientation您应该为您的布局明确设置标签(以及任何LinearLayout,永远)。Android 应该horizontal默认使用,但根据我的经验,如果没有设置它只会把它搞砸,并导致一些非常奇怪的布局。

于 2012-12-28T19:19:25.883 回答