在ListView中对焦控件

时间:2009-02-21 03:16:46

标签: android listview focus

背景: 我想要一个无法获得焦点的ListView(例如不会 用户触摸时突出显示行)。然而,每个行小部件都有它自己的 OnClickListener。 这是我在布局xml中指定的内容:

android:choiceMode="none" 
android:focusableInTouchMode="false"
android:focusable="false"

ListView的行为完全相同。 请有人解释一下

  1. 三者之间的相互关系
  2. 创建无法获得焦点的ListView的正确方法是什么?
  3. TIA。

3 个答案:

答案 0 :(得分:6)

虽然您在xml中指定了,但您也可以尝试在代码中指定。虽然我不确定您是否可以将列表设置为不可聚焦,但仍然可以滚动列表并且可以单击。

在你的setContentView ...

之后
myListView.setFocusableInTouchMode(false);

您也可以尝试从视图继承,然后在过渡期间添加一些调试代码,以帮助您找到列表实际具有焦点的时间。

    myListView.setOnFocusChangeListener(new OnFocusChangeListener(){

        public void onFocusChange(View v, boolean hasFocus)
        {
            v.setBackgroundColor(hasFocus ? Color.GRAY : Color.BLACK);
        }
    });

    myListView.setClickable(true);

答案 1 :(得分:2)

接收焦点的列表与不突出显示的所选行不同。只要用户在其中,该列表就会获得焦点。 ListView可以做的最好的事情就是为用户选择的任何内容报告int。我不确定每个小部件小部件是如何拥有它自己的ClickListener的。没有我知道的行小部件。 onListItemClick属于ListView。

我还没有弄明白,但是在android:listSelectorandroid:background之间调整alpha通道我觉得有一种方法可以使选择看起来就像一个未选中的行

android:listSelector="#8fff"使得选择前景发生变化。

似乎android自己选择了未选择的前景,这使得这很难。我希望这会有所帮助。

答案 2 :(得分:0)

当用户触摸列表中的一行时,您是否可以选择单选按钮?

以下是我自己代码的摘录。

// Create an adapter with a simple list item with single choice.
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, categories);

// Set the adapter to your list
listView.setAdapter(adapter);

干杯!