簡體   English   中英

在滾動視圖中設置線性布局的選擇

[英]Set selection of a Linear Layout in A Scroll View

我在滾動視圖線性Layout中使行多次充氣。我試圖更改用戶選擇的行的背景顏色。但是我僅在某些區域選擇行,這會更改行的背景顏色。我不知道為什么會發生。請幫助我。

ScrollView XML

<ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/mainScroll"
        android:layout_marginTop="5dp" >

        <LinearLayout
            android:id="@+id/mainData"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:orientation="vertical" >
        </LinearLayout>
    </ScrollView>

內部布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/resultLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:background="@drawable/backgroundcolor"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/id1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="25 Sep 2013" />

        <TextView
            android:id="@+id/id2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="" />

        <TextView
            android:id="@+id/id3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="" />

        <ImageView
            android:id="@+id/id4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="5dp"
            android:src="@drawable/ic"/>
    </LinearLayout>

</LinearLayout>

BackgroundColor.xml

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

Color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="grey">#ffffff</color>
    <color name="itemselected">#EDEDED</color>
</resources>

圖像作為圖像鏈接

它正在選擇中,但無法填滿整個布局的高度。請幫助我查找問題

嘗試將innerlayout的線性布局的寬度/高度更改為wrap_content? 另外,如果您發布代碼,也會有所幫助。

另外,我可能應該說,對於您嘗試執行的操作,可能應該使用列表視圖,而不是滾動視圖中的線性布局。

嘗試以下作為您的內部布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/resultLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#F00"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/id1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="25 Sep 2013" />

        <TextView
            android:id="@+id/id2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="coloumn 2" />

        <TextView
            android:id="@+id/id3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="Coloumn 2" />

        <ImageView
            android:id="@+id/id4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="5dp"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

</LinearLayout>

我的建議是使用Custom listview而不是嘗試在scrollview重復Linear Layout內容。 在這里您還可以更靈活地完成相同的任務。 在這里,您必須重寫getView方法以更改特定行的背景顏色。 您也可以使用ContextMenu

我建議您使用ListView而不是ScrollViewLinearLayout 因為ListView具有它們的兩個屬性。 那么,為什么不嘗試一下呢?

請嘗試以下步驟。

1)將onItemClickListener實現到您的列表視圖,如下所示。

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(
            AdapterView<?> arg0, View arg1,
            int position, long arg3) {
                adapter.setSelectedPosition(position);
    }
});

2)現在,在CustomAdapter類中,編寫以下代碼

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    convertView = inflater.inflate(R.layout.special_item_layout, null);

    RelativeLayout relativeLayout = (RelativeLayout) convertView
            .findViewById(R.id.relativeLayout1);

    if ((adapter.getSelectedPosition()) == position) {
        relativeLayout.setBackgroundResource(R.drawable.BackgroundColor);
    } else {
        relativeLayout.setBackgroundResource(R.color.transparent);

    //other code
}

如果未選擇項目,則放置transparent顏色。 您可以根據需要放置任何資源。

注意

您的列表在布局中必須具有singleChoice選項。 而且沒有任何背景。

<ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="#00000000"
        android:choiceMode="singleChoice">
</ListView>

嘗試這種方式可以做到這一點

final LinearLayout tripdetailsdata = (LinearLayout) inflater
                    .inflate(R.layout.linearLayout1, null);
            final LinearLayout trip_data = (LinearLayout)tripdetailsdata.findViewById(R.id.linearLayout2);

            trip_data.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    trip_data1.setBackgroundColor(Color.WHITE);
                    trip_data.setBackgroundColor(Color.BLUE);
                    trip_data1=trip_data;
                }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM