2012-05-22 42 views
1

我有一個線性佈局,其中包含三個列表視圖和三個按鈕。我已經自定義了列表視圖元素。我只是想要,如果有人觸摸列表視圖的元素,那麼相應的文本視圖應該作爲一個選取框生效。在android中的觸摸事件後啓動選取框

線性主要佈局是如下 -

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

<ListView 
    android:id="@+id/list1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="5dip" 
    android:layout_marginRight="5dip" 
    android:layout_marginTop="5dip" 
    android:layout_weight="1" 
    android:drawSelectorOnTop="false" 
    android:textSize="16dip" /> 

<Button 
    android:id="@+id/more_button1" 
    android:layout_width="130dip" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="5dip" 
    android:layout_marginRight="5dip" 
    android:layout_marginTop="5dip" 
    android:text="More" > 
</Button> 

<ListView 
    android:id="@+id/list2" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="5dip" 
    android:layout_marginRight="5dip" 
    android:layout_marginTop="5dip" 
    android:layout_weight="1" 
    android:drawSelectorOnTop="false" 
    android:textSize="16dip" /> 

<Button 
    android:id="@+id/more_button2" 
    android:layout_width="130dip" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="5dip" 
    android:layout_marginRight="5dip" 
    android:layout_marginTop="5dip" 
    android:text="More" > 
</Button> 

<ListView 
    android:id="@+id/list3" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="5dip" 
    android:layout_marginRight="5dip" 
    android:layout_marginTop="5dip" 
    android:layout_weight="1" 
    android:drawSelectorOnTop="false" 
    android:textSize="16dip" /> 

<Button 
    android:id="@+id/more_button3" 
    android:layout_width="130dip" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="5dip" 
    android:layout_marginRight="5dip" 
    android:layout_marginTop="5dip" 
    android:text="More" > 
</Button> 

</LinearLayout> 

定製列表項如下(LIST_ITEM_1,LIST_ITEM_2,LIST_ITEM_3) -

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:ellipsize="marquee" 
android:focusableInTouchMode="true" 
android:freezesText="true" 
android:lines="1" 
android:marqueeRepeatLimit="marquee_forever" 
android:padding="10dp" 
android:scrollHorizontally="true" 
android:scrollbarAlwaysDrawVerticalTrack="false" 
android:singleLine="true" 
android:textSize="20sp" > 

</TextView> 

,活性是如下 -

public class MarqueeActivity extends Activity { 

ListView lv1 = null; 
ListView lv2 = null; 
ListView lv3 = null; 

String s1[] = {"Hello This is a long Text which will help in tsting", "How", "Are", "You"}; 
String s2[] = {"I", "Am", "Fine"}; 
String s3[] = {"Welcome", "In", "New", "World"};  

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    lv1 = (ListView) findViewById(R.id.list1); 
    lv2 = (ListView) findViewById(R.id.list2); 
    lv3 = (ListView) findViewById(R.id.list3); 

    lv1.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item_1, s1)); 
    lv2.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item_2, s2)); 
    lv3.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item_3, s3)); 

    } 
} 

對於例如如果活動開始,然後有人觸摸第一個列表視圖中的第一個元素(你好,這是一個長文本,這將有助於測試),那麼它應該啓動字幕。

在此先感謝!

回答

0

可以在運行設置android:marqueeRepeatLimit="marquee_forever"爲TextView的上觸摸事件

+0

能否請你解釋如何做到這一點?我使用onItemClick(AdapterView arg0,View view,int position,long id){}方法將一個onItemClickListener實現爲列表視圖(稱爲lv1)。現在我知道哪個元素被點擊了,但是如何在特定元素上啓動marquee? (我想我需要在元素上使用方法setMarqueeRepeatLimit())。 – Comet

+0

我試着設置該參數但不工作。我認爲還應該使用其他的東西。 – AndroGeek

2

這工作:

lv1.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, int pos, 
       long arg3) { 
      // TODO Auto-generated method stub 
      Log.e("Child at 0 pos"," "+lv1.getChildAt(pos)); 
      txtv = (TextView)lv1.getChildAt(pos); 
      txtv.setSelected(true); 

     } 
    }); 
+0

Infact ** txtv.setMarqueeRepeatLimit(-1); **不是必需的。只需txtv.setSelected(true)即可​​完成工作。 – AndroGeek

+0

感謝您的解決方案,但觸摸事件後文本的顏色發生了變化(可能是其屬性)。如果我們點擊lv1中的最後一項(You)(txtv正在獲取空值)並且如果我們單擊第二個最後一個元素(Are),那麼應用程序再次崩潰,那麼最後一個項目將被選中。 – Comet

+0

它爲我工作。請發佈您的代碼。如果解決方案適用於您,也請提出我的答案。 – AndroGeek