2012-07-14 17 views
0

我有一個ListView列表,它運行良好。它是這樣設置的:透明/暗淡的ListView背景 - 我想要在點擊背景時銷燬ListView活動

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true </item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">true</item> 
</style> 

這是我的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="wrap_content" 
    android:padding="0dp" 
    android:background="@drawable/button_pressed" 
    android:clickable="false" 
    android:id="@+id/ListViewLayout" > 

    <ImageView 
     android:id="@+id/logo" 
     android:layout_width="100dp" 
     android:layout_height="50dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="20dp" 
     android:layout_marginTop="5dp" /> 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="30dp" > 
    </TextView> 
</LinearLayout> 

我也有一個代碼塊,它創建我的ListView和處理點擊次數:

public class RandomList extends ListActivity { 
    static final String[] randomList = new String[] {"Name 1", "Name 2", "Name 3", "Logo"}; 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setListAdapter(new RandomArrayAdapter(this, randomList)); 
    } 

    protected void onListItemClick(ListView l, View v, int position, long id){ 
     //Get selected items 
     Log.v("ListView l:", l.toString()); 
     Log.v("View v:", v.toString()); 
     Log.v("Position:", ""+position); 
     Log.v("ID: ", ""+id); 
     String selectedValue = (String) getListAdapter().getItem(position); 
     Bundle bundle = new Bundle(); 
     bundle.putString("Name", selectedValue); 
     Intent mIntent = new Intent(); 
     mIntent.putExtras(bundle); 
     setResult(RESULT_OK, mIntent); 
     finish(); 
    } 
} 

現在,與ArrayAdapter等,發生什麼是我得到一個項目列表。由於只有五個項目,並且由於我爲它設置的樣式,所以大部分屏幕都變暗了(原始的Activity),並且只有列表居中。問題是,如果有人點擊列表框外的灰色區域,我想完成Activity。我不能爲我的生活弄清楚如何。

我試圖執行一個OnTouchListener,但ListView沒有讓我這樣做,我不知道如何稱呼它爲圍繞TextViewLinearLayout容器。我對Android相當陌生,所以請爲我貶低它。

回答

0

創建此XML佈局,並稱之爲「list_layout.xml」:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:id="@+id/my_background" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<ListView android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 

然後改變你的onCreate()以下幾點:

public void onCreate (Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_layout); 

    View background = findViewById(R.id.my_background); 
    background.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      RamdomList.this.finish(); 
     } 
    }); 

    setListAdapter(new RandomArrayAdapter(this, randomList)); 

} 

我寫了這關我的頭頂,但不運行它,所以你可能會打幾件事,但你明白了。

+0

好吧,只要我關閉爲主題設置的樣式,就可以很好地工作。但是當我保持Theme.Transparent時,它失敗。我的猜測是主題導致my_background繞過列表,而不是圍繞整個屏幕(即 - wrap_content而不是fill_parent),從而使我無法在任何地方點擊。 如何讓窗口保持浮動狀態,背景變暗,但整個透明容器在後臺並保持可點擊的能力? – JBega 2012-07-15 20:55:00

0

我找到了解決方案,我的第二個問題,詢問有關框。在Theme.Transparent中,我只需要將WindowIsFloating變成false。將它與Wnafee的出色答案結合起來,它就像魅力一樣。