0

iOSのSegmenttabコントローラーのように機能するはずのカスタムコントロールがあります。

3つのテキストビューがあり、レイアウトは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/groupofthree"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/background"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tv_1"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="@color/black"
        android:gravity="center"
        android:text="Retiree"
        android:textColor="@color/whitetext"
        android:textSize="15dp"
        android:textStyle="normal" />

    <TextView
        android:id="@+id/tv_2"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="@color/lightGrey"
        android:gravity="center"
        android:padding="3dp"
        android:text="Under18/fulltime"
        android:textColor="@color/whitetext"
        android:textSize="15dp"
        android:textStyle="normal" />

    <TextView
        android:id="@+id/tv_3"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="@color/black"
        android:gravity="center"
        android:text="Others"
        android:textColor="@color/whitetext"
        android:textSize="15dp"
        android:textStyle="normal" />

</LinearLayout>

コントロールは次のようになります。

    public class SegmentedRadioGroup extends View{

        private Context m_Context;

        public TextView tv1;
        public TextView tv2;
        public TextView tv3;
        int selectedIndex = 0;

        public SegmentedRadioGroup(Context context, AttributeSet attrs) {

            super(context, attrs);
            m_Context = context;

        }

        public SegmentedRadioGroup(Context context, AttributeSet attrs, int defStyle) {

            super(context, attrs, defStyle);
        }

        public SegmentedRadioGroup(Context context) {
            super(context);
            // TODO Auto-generated constructor stub

            m_Context = context;
            LayoutInflater inflater = (LayoutInflater) m_Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = inflater.inflate(R.layout.threeradiobutton, null);


            v.isInEditMode();
            tv1 = (TextView) v.findViewById(R.id.tv_1);
            tv2 = (TextView) v.findViewById(R.id.tv_2);
            tv3 = (TextView) v.findViewById(R.id.tv_3);

            tv1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    selectedIndex = 0;
                    tv1.setBackgroundColor(R.color.darkgrey);
                    tv2.setBackgroundColor(R.color.lightGrey);
                    tv3.setBackgroundColor(R.color.lightGrey);
                }
            });

            tv2.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    selectedIndex = 1;
                    tv1.setBackgroundColor(R.color.lightGrey);
                    tv2.setBackgroundColor(R.color.darkgrey);
                    tv3.setBackgroundColor(R.color.lightGrey);

                }
            });

            tv3.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    selectedIndex = 2;

                    tv1.setBackgroundColor(R.color.lightGrey);
                    tv2.setBackgroundColor(R.color.lightGrey);
                    tv3.setBackgroundColor(R.color.darkgrey);
                }
            });
        }

        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);


        }


    }

このカスタムビューをレイアウトに追加するアクティビティは次のとおりです。

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

        <RelativeLayout
            android:id="@+id/widget1216"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/appspecific_menubar" >

            <TextView
                android:id="@+id/widget1222"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="@string/transaction_accounts_topbar"
                android:textColor="@color/whitetext"
                android:textSize="18sp"
                android:textStyle="bold" >
            </TextView>

            <ImageButton
                android:id="@+id/home_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:background="@null"
                android:paddingBottom="5dip"
                android:paddingLeft="10dip"
                android:paddingTop="5dip"
                android:src="@drawable/home" >
            </ImageButton>
        </RelativeLayout>
    <LinearLayout 
        android:id="@+id/testLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />.
     </LinearLayout>

そして、活動はこのように見えます。addviewを使用してビューをレイアウトに追加しました。

    public class TransactionAccount extends Activity {
        LinearLayout selector;
        SegmentedRadioGroup sg_test;
        LayoutInflater inflater;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.transactionaccount_main);
            selector = (LinearLayout)findViewById(R.id.testLayout);




            sg_test = new SegmentedRadioGroup(this);
            selector.addView(sg_test);



    //      inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    //      selector = inflater.inflate(R.id., null);

    //      sg_test = new SegmentedRadioGroup(this);

    //      sg_test.tv1.setText("1");
    //      sg_test.tv2.setText("2");
    //      sg_test.tv3.setText("3");
    //      sg_test.tv1.setBackgroundColor(R.color.blacktext);
    //      sg_test.setVisibility(View.VISIBLE);
    //      
    //      Log.d("TransactionAccount", "onCreate++++++" + sg_test.tv1.getText());
    //      Log.d("TransactionAccount", "onCreate++++++" + sg_test.tv2.getText());
    //      Log.d("TransactionAccount", "onCreate++++++" + sg_test.tv3.getText());
        }
    }

しかし、画面に表示されるのは空白の画面です。表示されるカスタムコントロールではありません。どこがおかしいのか教えてください。

前もって感謝します。

4

1 に答える 1

1

まず、メソッドがないためViews、のサブクラスに子を追加することはできません。代わりに、またはそのサブクラスの1つ(など)を拡張する必要があります。ViewaddViewViewGroupLinearLayoutRelativeLayout

上記のことを行った後、次のコマンドでビューを簡単に追加できます。

View v = inflater.inflate(R.layout.threeradiobutton, this, true);

膨らんだレイアウトをカスタムに実際に追加しますView

現在、表示するものがないため、画面に何かが表示されていません。カスタムViewは空です。

于 2012-07-16T09:39:00.783 に答える