2

私は、再利用可能なインターフェイス、つまり年ピッカー (ちょうど年) を作成するつもりです。基本的に、このコンポーネントにはいくつかのボタンとテキストビューが必要で、スライド機能も優れています。

私が言ったように、再利用できるように努力していますが、Android がそれを実現するための手段を提供しているかどうかはわかりません。「カスタム コンポーネント」の記事を読み始めましたが、これは本当に必要ですか? または、ビューオブジェクトなどへの参照を持つ通常の構成クラスのようなものを作成する必要がありますか?

ありがとう。

更新:簡単でした-誰かが同じ状況に陥った場合の例を次に示します

YearPicker.class

public class YearPicker extends LinearLayout {
    protected int _minValue = 1980;
    protected int _currentValue;
    protected int _maxValue;

    protected int _decrementValueView = R.id.decrement_value;
    protected int _previousValueView = R.id.previous_value;
    protected int _currentValueView = R.id.current_value;
    protected int _nextValueView = R.id.next_value;

    public YearPicker(Context context) {
        super(context);
    }

    public YearPicker(Context context, AttributeSet attrs) {
        super(context, attrs);
        Calendar calendar = Calendar.getInstance();
        _maxValue = calendar.get(Calendar.YEAR);
        _currentValue = _maxValue - ((_maxValue - _minValue) / 2);

    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);

        TextView curView = (TextView) findViewById(_currentValueView);
        curView.setText(Integer.toString(_currentValue));
        findViewById(_decrementValueView).setOnClickListener(
                _onDecrementValueClick);
    }

    protected OnClickListener _onDecrementValueClick = new OnClickListener() {
        @Override
        public void onClick(View v) {
            _currentValue--;
            TextView curView = (TextView) findViewById(_currentValueView);
            curView.setText(Integer.toString(_currentValue));
        }
    };
}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    <include 
        layout="@layout/year_picker"/>

</LinearLayout>

year_picker.xml

<view xmlns:android="http://schemas.android.com/apk/res/android"
    class="localhost.yearpicker.YearPicker"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/decrement_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:id="@+id/previous_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/current_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/next_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <Button
        android:id="@+id/increment_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</view>
4

2 に答える 2

2

あなたの場合は、望ましいViewGroupを拡張し、ビューのスタイル設定と配置のためにXMLを拡張し、それらのビューへのアクセスを取得し、関連するすべてのset/getメソッドを追加します。これで完了です。必要に応じて、コンポーネントの属性を定義して、XMLで使用しながらカスタム機能を調整することもできます。

于 2012-05-14T19:50:22.920 に答える
1

カスタム ビューはまったく必要ない場合があります。必要に応じて拡張できる個別の XML レイアウトを保持し、カスタム OnClickListeners (または OnTouchListeners) で制御することを好みます。

基本ビューのメソッド (onLayout や draw() メソッドなど) をオーバーライドする必要がある場合にのみ、カスタム ビューに頼ります。

于 2012-05-14T19:55:01.983 に答える