0

xml-layout をカスタム View-class にインフレートしようとしています。これは、実際のソフトウェアで LinearLayout に配置されます。いくつかのグーグルの後、次のクラスを使用してレイアウトを膨らませるカスタムクラスを作成することができました:

    public class LitteringView extends RelativeLayout
{

    public LitteringView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        View.inflate(context, R.layout.littering_layout, this);

    }


    public LitteringView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }


    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // TODO Auto-generated method stub
         for(int i = 0 ; i < getChildCount() ; i++){
             getChildAt(i).layout(l, t, r, b);
         }
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }





}

これをlinearlayoutに追加すると、間違いなく膨らみます:

layout.addView(new LitteringView(getActivity()));

問題は、画面を LinearLayout の 3 つの子の間で均等に分割する必要があるのに、画面全体を使用することです。他のビューも動的に作成されます。スペース全体を占有しないようにするにはどうすればよいですか?

私は 1 つのカスタム ビュー/クラスを作成し、その関数をその中にパッケージ化しようとしています。これにより、xml を使用してビューのレイアウトを定義したいときに、親レイアウト (この場合は LinearLayout) に簡単に追加できます。

4

1 に答える 1

1

ビューには「重み」を使用する必要があります。これの簡単な例:

Layout.LayoutParams params = new LinearLayout.LayoutParams(width, height, weight);

ケースに合わせて最適化する必要があります。すべてのビューに均等に重み値を与えます (例: すべてのビューに 1)。ビューを共有する必要があります。

于 2013-08-16T09:48:09.110 に答える