0

白い背景を使用したいので、ListViewの色を変更しようとしています。ListViewに触れないと、テキストは表示されません。タッチすると、背景が黒に切り替わり、テキストが白であるためテキストが表示されます。テキストの色を変更して、タッチしたときに背景の色が変わるのを防ぐにはどうすればよいですか?これが私のコードです:

        public class LayoutNight extends Fragment {

        ListView myList;

        String[] listContent = {

                "Mo", 
                "Di", 
                "Mi",
                "Do",
                "Fr", 
                "Sa", 
                "So"

        };

        public static Fragment newInstance(Context context) {
            LayoutNight f = new LayoutNight();  

            return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
            ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_night, null);     

            myList = (ListView)root.findViewById(R.id.list);

            ArrayAdapter<String> adapter

            = new ArrayAdapter<String>(getActivity(),

                    android.R.layout.simple_list_item_multiple_choice,

                 listContent);



            myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

            myList.setAdapter(adapter);
// That was a try, but it crashed ...

    //        TextView myListText = (TextView)root.findViewById(R.id.list);
    //        myListText.setTextColor(color.black);

            return root;
        }

    }

編集

ラグナンダンの提案をしましたが、背景は変わりませんでした。これは手つかずのスクリーンショットです

手つかず

これはスクロール時の画面です(残念ながら黒スクロール

そして、これはオプションを選択する際の画面です オプションの選択

編集 スクロール中に背景を変更せずにフォローするように動作するようになりました(PragnaniとRaghunandanのおかげで)が、クリックできなくなりました。クリック可能にするにはどうすればよいですか?

    <ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/listbkg"
android:drawSelectorOnTop="true"
android:cacheColorHint="@android:color/transparent">
</ListView>

list_row.xml

    <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:textSize="35sp"
        android:textColor="#000000"
        android:layout_gravity="center"
        android:maxHeight="75px"/>

コード:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_night, null);     

    myList = (ListView)root.findViewById(R.id.list);

    ArrayAdapter<String> adapter
    = new ArrayAdapter<String>(getActivity(),R.layout.list_row,listContent);

    myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    myList.setFocusable(true);
    myList.setClickable(true);
    myList.setAdapter(adapter);

    return root;
}
4

2 に答える 2

1

カスタムアダプタを使用することをお勧めします。カスタマイズが簡単。

getviewで、カスタムレイアウトを膨らませます。

http://developer.android.com/guide/topics/resources/drawable-resource.html。状態リストの下のトピックを確認してください。

public View getView(final int arg0, View arg1, ViewGroup arg2) {
    final ViewHolder vh;
    vh= new ViewHolder();

    if(arg1==null )
        {
        arg1=mInflater.inflate(R.layout.customlayout, arg2,false);  
        }
    else
    {
     arg1.setTag(vh);
    }

    return arg1;
}

customlayout.xml

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="horizontal"
 android:background="@drawable/listbkg" //set layout background
 android:cacheColorHint="#000000"
>
 // other ui elements. similarly you can set background for your other ui elements
 //android:background="@drawable/otherui"
 // define your own drawables when pressed and in normal state. 

</LinearLayout>

ドローアブルフォルダ内のlistbkg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" 
    android:drawable="@drawable/pressed" />
<item  android:state_focused="false" 
    android:drawable="@drawable/normal" />

ドローアブルフォルダ内のpressed.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FF1A47"/>    
<stroke android:width="3dp"
        android:color="#0FECFF"/>
<padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
<corners android:bottomRightRadius="7dp"
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
</shape>

ドローアブルフォルダ内のnormal.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FFFFFF"/>    //can change color
<stroke android:width="3dp"         //border color  
        android:color="#0FECFF" /><!-- #330000FF #ffffffff -->
<gradient          //add gradient depending on your need else you can remove this
    android:startColor="#ffffffff"  
    android:endColor="#110000FF" 
    android:angle="90"/> 

<padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
<corners android:bottomRightRadius="7dp"//for rounded corners
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
</shape>

上記と同じ色かどうかわかりません。しかし、動作原理は同じです

ここに画像の説明を入力してください

于 2013-03-24T19:26:23.303 に答える
0

テーマをTheme.Lightに変更する必要がありました。申し訳ありませんが、初心者です...

これがListViewになりました

    <ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/white"
android:drawSelectorOnTop="true"
android:cacheColorHint="@android:color/transparent">
</ListView>

そして、コードスニップセットに従う

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_night, null);     

    myList = (ListView)root.findViewById(R.id.list);

    ArrayAdapter<String> adapter
    = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_multiple_choice,listContent);

    myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    View header = (View)inflater.inflate(R.layout.listview_header_row, null);

    myList.addHeaderView(header);        
    myList.setAdapter(adapter);

    return root;
}
于 2013-03-30T14:13:41.633 に答える