5

API レベル 11setDividerDrawable()からsetShowDividers()で導入されLinearLayout、線形レイアウトで子要素間の仕切りを表示できるようになりました。この機能を本当に使いたいのですが、Honeycomb (API レベル < 11) より前のデバイスもターゲットにしています。

これを修正する 1 つの方法は、LinearLayout を拡張して仕切りを手動で追加することです。これはプロトタイプです:

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;

public class DividerLinearLayout extends LinearLayout
{
    public DividerLinearLayout(Context context)
    {
        super(context);
    }

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

    public DividerLinearLayout(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public void addView(View child)
    {
        if(super.getChildCount() > 0)
        {
            super.addView(LayoutInflater.from(getContext()).inflate(R.layout.divider, null));
        }
        super.addView(child);
    }
}

ただし、このような実装を使用すると、子を繰り返し処理するクライアントの動作が変わります。クライアント自身が挿入したビューもあれば、 によって挿入されたビューもありますDividerLinearLayout。ユーザーが指定したインデックスにビューを挿入している場合にも問題が発生します。インデックスの変換を実装することもできますが、これを間違えると厄介なエラーが発生する可能性があります。また、もっと多くのメソッドをオーバーライドする必要があると思います。

問題を解決するより良い方法はありますか?誰かがすでに自由に使用できるDividerLinearLayout同等のものを開発しましたか? Android の互換ライブラリには存在しないようです。

4

2 に答える 2

10

私が間違っていなければ、ActionBarSherlock ライブラリは既にこれを実装しており、下位互換性のある ActionBar タブを提供しています。最初にそのライブラリを含めて、独自のライブラリを作成する前に試してみることをお勧めします。

これは、特定のクラス (com.actionbarsherlock.internal.widget.IcsLinearLayout)のコードです。

于 2012-08-27T16:07:03.443 に答える
1

IcsLinearLayout は内部的なものであり、ActionBarSherlock は今後更新されないため、「LinearLayoutICS」と呼ばれる Google のものを使用することをお勧めします。

使い方はこちらをお読みください。

于 2014-03-21T10:23:44.710 に答える