GridView 焦点问题(listView 类似)

您所在的位置:网站首页 詹天佑修筑铁路的故事梗概100字 GridView 焦点问题(listView 类似)

GridView 焦点问题(listView 类似)

2023-09-16 03:52| 来源: 网络整理| 查看: 265

默认first Item default selected

如果不手动 setSelecttion(int) 一个位置,gridview默认select first item 另外注意下文中的item selector 和元素selecor item selector 指:item 元素 selector 指:item 上的 view 元素 比如TextView Buttom

UI效果上显示 1.1、item的selector

item默认first item selected 那么他的selector会成selected 状态,有时候并不想视图一加载这个效果就显示。可以通过 gridview.setFocusAble(false)来解决。

让gridview无法获取焦点那么 first item 的selected状态 还是被selected了,但是他的selecor不会显示

2、item内的元素的selector

元素的selector 无法通过改变gridview的focusAble 解决。 也就是说当gridview是focusAble = false,item的selector状态不会显示出来,但是元素的会显示出来。这个很麻烦

针对这种问题,如果要做到元素默认选中时不显示 element selector 那么就要在代码中思量,不要在xml里直接设置selectorDrawable

3、焦点离开gridview后清除item的selected状态(适用于内部的元素selected)

如果不进行处理,焦点离开gridview的时候 哪个item slected了还是selected的。这个是符合逻辑的,焦点离开后也可以通过读取gridView.getSelectedItemPosition()得到selected的位置

如果想焦点离开gridview 后item selected 状态清楚可以加上以下代码。

直接在gridview后加上 gridview .setSelection(-1); 不管是在 adapter.notifyDataSetChanged()前还是后,倒是没有效果的

```java gridView.setOnFocusChangeListener(new View.OnFocusChangeListener() { @SuppressLint("NewApi") @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { GridView gView = (GridView) v; gView.setSelection(-1); } } }); ``` 4、gridview focusAble 和 focusDisable 处理默认选中下 元素的selecor 4.1、focusDisAble的情况

gridview 的 onItemSelected(AdapterView

4.2、focusAble的情况

gridview 的 onItemSelected(AdapterView

4.3、解决

根据以上两种情况,解决方式如下: 首先xml里不直接设置slectorDrawable, 在代码中设置

focusAble的直接让focus 移动到别人身上,那么默认的选择一个item 就显示不出效果了,此情况的slected 状态还在,要想移除selected状态用 3、 中方法

focusDisable的 想了很久,其实也很简单,代码中判断下反正focus都disable了压根不能变化item选择直接把selectorDrawable设置成null 就成了。

ex:

mSeriesGridView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { // boolean oneShoot = isFirstCome; @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { //如果是focusAble的 进来不会默认onItemSelected 一次,focusDisable 的会默认进来一次 LogDebugUtil.i(TAG, " select = " + position); if (!mSeriesGridView.isFocusable()) { LogDebugUtil.i(TAG, "mSeriesGridView focable = false isFirstComeGridView == false"); view.findViewById(R.id.flag_iv).setBackgroundDrawable(null); ((TextView) view.findViewById(R.id.series_text)).setTextColor( Color.parseColor("#a7cded")); } else { LogDebugUtil.i(TAG, "mSeriesGridView focable = true"); view.findViewById(R.id.flag_iv).setBackgroundResource(R.drawable.cltv_video_detail_current_bottom_selector); TextViewUtil.setTextColorXmlDrawable( (TextView) view.findViewById(R.id.series_text), getResources(), R.xml.cltv_video_detail_current_selector); } } @Override public void onNothingSelected(AdapterView parent) { } }); ps:解决focusAble 元素select的另外一种方式 keyboardGridView.setOnFocusChangeListener(new OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { if (selectView != null) { selectView.clearFocus(); TextView tv = (TextView) selectView.findViewById(R.id.episode); tv.setTextColor(Color.WHITE); tv.setBackgroundResource(R.drawable.key); } } else { LoggerUtil.d(TAG, "position = " + keyboardGridView.getSelectedItemPosition()); if (selectView != null) { TextView tv = (TextView) selectView.findViewById(R.id.episode); if (tv.getTextColors() == TextViewUtil.getColorStateList(getResources(), R.xml.cltv_text_white_blue_selector)){ LogDebugUtil.d(TAG, "tv.getTextColors() == TextViewUtil.getColorStateList"); }else{ TextViewUtil.setTextColorXmlDrawable(tv, getResources(), R.xml.cltv_text_white_blue_selector); tv.setBackgroundResource(R.drawable.keypad_selector); } } } } }); keyboardGridView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { //这里有个问题,first Default select的时候 arg0 = null //所以第一次离开gridview的时候 default select item 的focus并不能被清 //但是先把 这个select落到别人那就可以了 selectView = arg1; recordView = arg1; } @Override public void onNothingSelected(AdapterView arg0) { } }); 4.4、补充

一个平时用的不多的select的配置在gridview的xml中 android:listSelector=”@drawable/tab_bottom_card_selector”



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3