7

ビューのセットを、まったく同じことを行うはずのカスタム複合ビューに置き換えようとしています。具体的には、次のレイアウトを頻繁に繰り返します。

<LinearLayout style="@style/customLayoutStyle">
  <Button style="@style/customButtonStyle" />
  <TextView style="@style/customTextViewStyle" />
</LinearLayout>

私の目標は、このブロックを単一の に置き換えること<Highlighter />です。

この目的のために、 res/layout/highlighter.xml で次のように定義します

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/customLayoutStyle">
    <Button android:id="@+id/btnHighlighter" style="@style/customButtonStyle" />
    <TextView android:id="@+id/lblHighlighter" style="@style/customTextViewStyle" />    
</merge>

そして、私のカスタムビューには次のようなものがあります

public class Highlighter extends LinearLayout {
    public Highlighter(Context context, AttributeSet attrs) {
        super(context, attrs);
        inflate(context, R.layout.highlighter, this);
    }
}

これはほとんど機能しますが、<merge>タグのレイアウト パラメータの一部が無視されているようです。このスクリーンショットは、何が問題なのかを示しています。一番下の行の 3 つの画像は、置き換えようとしている LinearLayout ブロックを 3 つ使用して、正しく配置されています。左上の画像だけがカスタム ビューを使用しています。私の推測では、padding と layout_weight のレイアウト パラメータが失われています。何か間違ったことをしていますか、それとも回避策が必要ですか?

4

3 に答える 3

5

パラメータが失われていることについては正しいです。これを回避するには、ハイライターを定義するレイアウトにハイライターのスタイル定義を配置します。

例えば

<yournamespace.Highlighter 
    style="@style/customLayoutStyle"
/>
于 2013-02-10T17:32:47.683 に答える