背景: 我想要一个无法获得焦点的ListView(例如不会 用户触摸时突出显示行)。然而,每个行小部件都有它自己的 OnClickListener。 这是我在布局xml中指定的内容:
android:choiceMode="none"
android:focusableInTouchMode="false"
android:focusable="false"
ListView的行为完全相同。 请有人解释一下
TIA。
答案 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:listSelector
和android: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);
干杯!