0

LinearLayout を拡張して、多数のコントロールから複合ビューを作成したいと考えています。XML ファイルを使用して、カスタム コントロールの内部レイアウトを指定しています。を介してコードからカスタム コントロールを膨らませていますLayoutInflater

問題は:

ルートLinearLayout要素をmergeXML の要素に置き換えると、レイアウト全体が崩壊します。そうでない場合は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 デザイナーによるものですが、信じてください。Android フォンでもこのように表示されます。

4

1 に答える 1

1

android:orientationレイアウト(およびこれまで)のタグを明示的に設定する必要がありますLinearLayout。Androidはhorizontalデフォルトで使用していると思われますが、私の経験では、設定されていない場合は混乱し、非常に奇妙なレイアウトになります。

于 2012-12-28T19:19:25.883 に答える