相关疑难解决方法(0)

如何添加自定义按钮状态

例如,默认按钮在其状态和背景图像之间具有以下依赖关系:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/btn_default_normal_disable" />
    <item android:state_pressed="true" 
        android:drawable="@drawable/btn_default_pressed" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/btn_default_selected" />
    <item android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_focused="true"
        android:drawable="@drawable/btn_default_normal_disable_focused" />
    <item
        android:drawable="@drawable/btn_default_normal_disable" />
</selector>
Run Code Online (Sandbox Code Playgroud)

如何定义自己的自定义状态(类似于smth android:state_custom),那么我可以使用它来动态更改我的按钮视觉外观?

android state button

124
推荐指数
3
解决办法
6万
查看次数

ListView的state_activated,state_selected,state_pressed,state_focused的解释

任何人都可以解释(或指向一个解释的链接)ListView项目的state_activated,state_selected,state_pressed和state_focused之间的区别?它们都是ListView的有效状态吗?是否使用触摸或键盘是否重要?此链接似乎不再有效.

非常感谢!

android android-listview

29
推荐指数
1
解决办法
2万
查看次数

自定义可检查视图,响应选择器

我有一组FrameLayout我想要检查/选择,

也就是说,点击后我希望FrameLayout显示为checked- 当再次按下时,我希望它成为联合国checked.更重要的是,我希望通过使用a来像往常一样描述这个视觉阙<selector>.

我似乎无法让这个工作 - 我不确定我缺少什么:

public class CheckableFrameLayout extends FrameLayout implements Checkable {
    private boolean mChecked = false;
    public CheckableFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setChecked(boolean checked) {
        mChecked = checked;
        refreshDrawableState();
    }

    public boolean isChecked() {
        return mChecked;
    }

    public void toggle() {
        setChecked(!mChecked);
    }
}
Run Code Online (Sandbox Code Playgroud)

布局CheckableFrameLayout:

<com.test.view.CheckableFrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/selector_horizontal"
    android:clickable="true" >
Run Code Online (Sandbox Code Playgroud)

支持它的选择器(selector_horizo​​ntal.xml):

<item android:drawable="@drawable/selector_vertical_selected" android:state_pressed="false" android:state_checked="true"/>  
<item android:drawable="@drawable/selector_vertical_pressed" android:state_pressed="true" …
Run Code Online (Sandbox Code Playgroud)

android view custom-view

23
推荐指数
1
解决办法
1万
查看次数

ListView项目不会保持"选中"状态

我想在用户点击它时更改listview项的背景.有点像Honeycomb设置页面(虽然我没有处理只是设置所以我没有使用PreferenceActivity)我有这个功能通过资源状态选择器状态选择器工作,除了单击列表视图菜单更改线性的情况列表视图右侧的布局(一种分屏视图).我猜测listview失去焦点所以state_pressed不再是真的.

   <item android:state_pressed="true">
     <shape  >
        <solid android:color="@color/blue1" />
     </shape>
   </item>
Run Code Online (Sandbox Code Playgroud)

在选择另一个列表视图项目之前,是否保持列表视图项目着色的任何提示?谢谢!

编辑:

我能够在setOnItemClickListener中更改背景

view.setBackgroundResource(R.color.red); 
Run Code Online (Sandbox Code Playgroud)

我只需要一次一个选择,从而被点击其他列表项目时,我试图lv.invalidate()lv.getChildAt(0).invalidate(),但既不工作和第二导致空指针异常.有什么想法让颜色回来?

resources android listview preferenceactivity

8
推荐指数
2
解决办法
2万
查看次数

在ListView中突出显示多个选定/已选中/已激活

哇,文档在列表项选择方面很可怕.我只需要能够选择并突出显示列表中的多个项目.我已经浏览了网页并看到了引用android:choiceMode="multipleChoice",我猜这可以让你选择多个项目.但是我在哪里可以获取我的活动中的所选项目?为什么当我尝试使用选择多个项目时setSelection(position),之前突出显示的项目会消失?

谷歌也在View.setActivated(boolean)那里描述

请注意,激活与选择不同.选择是一个瞬态属性,表示用户当前正在与之交互的视图(层次结构).激活是一种较长期的状态,用户可以将视图移入和移出.例如,在启用了单个或多个选择的列表视图中,将激活当前选择集中的视图.(嗯,是的,我们对这里的术语深感抱歉.)

所以我应该使用激活而不是选择?这个SO答案谈到"激活"只是"已检查"的后HoneyComb版本.但是,如果您应该使用"激活"进行多项选择,android:choiceMode="multipleChoice"那么首先是什么意思呢?

java android

8
推荐指数
1
解决办法
4798
查看次数

android 2.3上的导航抽屉ListView选择问题

我尝试为旧的Android 2.3自定义导航抽屉菜单.
为此,我使用developer.android.com的官方SampleNavigationDrawer
本教程实现ActionBarCompat.

android.support.v4.widget.DrawerLayout中使用下一个ListView:

<ListView
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#111"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:drawSelectorOnTop="false"
    android:fadingEdge="none"
    android:focusable="false"
    android:saveEnabled="true" />
Run Code Online (Sandbox Code Playgroud)

with drawer_list_item.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_selector"
    android:drawableLeft="@drawable/selector"
    android:drawablePadding="16dp"
    android:gravity="center_vertical"
    android:minHeight="48dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textColor="@drawable/text_color_selector" />
Run Code Online (Sandbox Code Playgroud)

bg_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/yellow" />
    <item android:state_pressed="true" android:drawable="@color/red" />
    <item android:state_checked="true" android:drawable="@color/lemon" />
    <item android:state_activated="true" android:drawable="@color/orange" />
    <item android:state_selected="true" android:drawable="@color/green_pastel" />
    <item android:state_active="true" android:drawable="@color/gold" />
    <item android:state_accelerated="true" android:drawable="@color/blue" />
    <item android:state_enabled="true" android:drawable="@color/pink_dark" />
    <item android:drawable="@color/black" />
</selector> …
Run Code Online (Sandbox Code Playgroud)

android listviewitem android-2.3-gingerbread navigation-drawer

5
推荐指数
1
解决办法
3612
查看次数

View.isActivated() 的作用是什么?

我最近遇到了这个View.isActivated()方法,但不确定它的作用。文档

公共布尔 isActivated ()

指示该视图的激活状态。

如果视图被激活则返回 true,否则返回 false

视图的状态是什么意思?视图什么时候被激活,什么时候不激活?

android view

5
推荐指数
1
解决办法
8222
查看次数

setSelected()与ListView一起工作

我正在尝试单击ListView的单击项来更改背景.但在我看来,实际上并不可能.有很多帖子都有这样做的例子,但没有一个可靠地运作.据我所知 - 它与"回收"有某种关系.

我在适配器的OnItemClickListener中调用view.setSelected(),它根据我的设置很好地将另一个背景应用于所选项目.但是当我选择导致ListView缺少空间的项目(不确切的重要程度)并且在ListView内部出现(或消失)scollbar时 - android会忘记我的选择并应用默认样式.旋转屏幕时会发生同样的错误 - 该项目取消选择.所以我认为在调用适配器的getView()时会发生"取消选择".

有趣的是,我的onClick事件导致向后台服务发送json请求并接收和解码json响应,因此项目点击和活动内容更改之间需要一些时间.这是它的样子:

  1. 我单击一个ListView项目.它将背景更改为"选定颜色".
  2. 我等待的几分钟.
  3. 活动内容根据服务响应而变化.ListView中会出现一个滚动条.项目背景更改为"默认颜色"(取消选择项目).

单击不会导致滚动条显示的项目可以很好地工作 - 在处理服务的响应后,所选项目不会被取消选中.

试图在适配器的getView()中调用setSelected()不会影响bug.物品仍然被取消选择.我尝试在getView()中手动设置项目的背景 - 它变得更有趣:导致滚动条外观的项目开始正常工作,但是不会导致滚动条出现的项目(实际上这意味着它们不会导致getView()调用)停止工作!

所有代码都非常复杂,所以我只发布一些重要的片段.这是我的OnItemClickListener:

private AdapterView.OnItemClickListener onCategoryClickListener =
        new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, final View view, final int position,
            long id) {
        categoriesAdapter.setSelectedPosition(position);
        view.setSelected(true);
        // More code here
    }
};
Run Code Online (Sandbox Code Playgroud)

这是我的适配器代码的一个片段:

private int selectedPosition;
private boolean selectable = true;

public void setSelectedPosition(int position) {
    this.selectedPosition = position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView label = (TextView) …
Run Code Online (Sandbox Code Playgroud)

android listview recycle

4
推荐指数
1
解决办法
2075
查看次数