2017-03-09 68 views
1

我有一個對話框彈出,列出所有的應用程序,並通過此ImageButton的重點,但不能點擊

private void addClickListener(){ 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override`` 
      public void onItemClick(AdapterView<?> av, View v, int pos, long id) { 
       Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString()); 
       AllApps.this.startActivity`(i); 
      } 
     }); 

啓動它們。如果我把佈局文件可成爲焦點,他們強調了ImageButtons,但不能點擊

<ImageView 
    android:id="@+id/item_app_icon" 
    android:layout_width="250dp" 
    android:layout_height="100dp" 
    android:layout_alignParentLeft="true" 
    android:gravity="right" 
    android:background="@drawable/border_image" 
    android:focusable="true"/> 

我試圖添加也沒有結果android:clickable="true"

我選擇XML(border_image)

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 

    android:state_focused="false"> 
    <shape 
     android:innerRadiusRatio="1" 
     android:shape="rectangle" > 
     <solid android:color="@android:color/white" /> 
     <corners 
      android:bottomLeftRadius="5dp" 
      android:bottomRightRadius="5dp" 
      android:radius="5dp" 
      android:topLeftRadius="5dp" 
      android:topRightRadius="5dp"></corners> 
     <padding 
      android:bottom="10dp" 
      android:left="10dp" 
      android:right="10dp" 
      android:top="10dp" /> 

    </shape></item> 

<!-- button focused --> 
<item 
    android:state_focused="true"> 
    <shape 
     android:innerRadiusRatio="1" 
     android:shape="rectangle" > 
     <solid android:color="@android:color/holo_orange_dark" /> 
     <corners 
      android:bottomLeftRadius="5dp" 
      android:bottomRightRadius="5dp" 
      android:radius="5dp" 
      android:topLeftRadius="5dp" 
      android:topRightRadius="5dp"></corners> 
     <padding 
      android:bottom="10dp" 
      android:left="10dp" 
      android:right="10dp" 
      android:top="10dp" /> 

    </shape></item> 

XML對於在彈出的對話框imageButtons和文字

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/item_app_icon" 
    android:layout_width="250dp" 
    android:layout_height="100dp" 
    android:layout_alignParentLeft="true" 
    android:gravity="right" 
    android:background="@drawable/border_image" 
    android:focusable="true"/> 
<TextView 
    android:id="@+id/item_app_label" 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/item_app_icon" 
    android:paddingTop="10dp" 
    android:background="#26F0F8FF" 
    android:textColor="@android:color/black" 
    android:textSize="15dp" 
    android:gravity="center"/> 

這是對話框彈出代碼

protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_all_apps); 
    loadApps(); 
    loadListView(); 
    addClickListener(); 
    //onfocus(); 

    adpter = new dbAdapter(this); 
    adpter.open(); 


    //addLongClickListener(); 
} 

private void loadApps() { 
    manager = getPackageManager(); 
    apps = new ArrayList<AppDetail>(); 

    Intent i = new Intent(Intent.ACTION_MAIN, null); 
    i.addCategory(Intent.CATEGORY_LAUNCHER); 

    List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0); 

    for (ResolveInfo ri : availableActivities) { 
     AppDetail app = new AppDetail(); 
     app.label = ri.loadLabel(manager); 
     app.name = ri.activityInfo.packageName; 
     app.icon = ri.activityInfo.loadIcon(manager); 
     //String name= app.name.toString(); 
     //String icon = app.icon.toString(); 
     //adpter.createApp(name,icon); 
     if (app.name.equals("com.bux.launcher")){ 

     } 
     else { 
      apps.add(app); 
     } 
    } 
} 

private void loadListView() { 
    list = (GridView) findViewById(R.id.apps_list); 

    ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this, R.layout.list_item, apps) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = getLayoutInflater().inflate(R.layout.list_item, null); 
      } 

      ImageButton appIcon = (ImageButton) convertView.findViewById(R.id.item_app_icon); 
      appIcon.setImageDrawable(apps.get(position).icon); 

      appIcon.setFocusable(true); 
      appIcon.setFocusableInTouchMode(true); 
      appIcon.setClickable(true); 




      TextView appLabel = (TextView) convertView.findViewById(R.id.item_app_label); 
      appLabel.setText(apps.get(position).label); 



      return convertView; 
     } 
    }; 



    registerForContextMenu(list); 
    list.setAdapter(adapter); 
} 

private void addClickListener(){ 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> av, View v, int pos, 
           long id) { 
      Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString()); 
      AllApps.this.startActivity(i); 
     } 
    }); 

} 
+0

分享您的活動代碼。 –

+0

與我分享你的完整的xml代碼 – Reena

回答

0

添加機器人:descendantFocusability =「blocksDescendants」你的根視圖

+0

我阻止焦點,所以它不會突出顯示我imageButtons ....我想圖像按鈕可以focusable(改變它們的背景),並可點擊發射intent ... –

1

你需要創建和繪製的XML文件,然後將以下代碼粘貼在那裏選擇和其他圖像

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <item 
     android:state_pressed="true" 

     android:drawable="@drawable/search_sel" /> 
    <item 
     android:drawable="@drawable/search" /> 
</selector> 
+0

我已經創建了一個XML文件調用border_image與選擇器爲焦點狀態。我在我的問題上添加了它。 –

+0

然後在你的按鈕使用可繪製這樣 的android簡單:背景=「@繪製/ border_image」 –

+0

如果你看一下我的代碼,我已經把它作爲安卓背景ImageView的 –

0

我注意到你的問題是指ImageButtons,但是你使用ImageView。嘗試將<ImageView>更改爲<ImageButton>

+0

我已經改變了它的ImageButton,但我獲得同樣的東西。當網格中的圖像按鈕被點擊時,它只會關注並且不會啓動它的意圖。 –

+0

你可以發佈你的'list'的其餘代碼嗎?我假設你正在使用listView? – Vinnie

+0

將一個調試器放在說'Intent i = manager ...'的行上,看看這行是否被執行。如果不是,您的設置監聽器的方式有問題。 – Vinnie