小编aks*_*t23的帖子

Android M Permissions:对shouldShowRequestPermissionRationale()函数的使用感到困惑

我正在阅读关于Android M中新Permissions模型的官方文档.它讨论了如果应用程序先前已请求此权限并且用户拒绝该请求shouldShowRequestPermissionRationale(),则返回的函数true.如果用户过去拒绝了权限请求并选择了"不再询问"选项,则此方法返回false.

但是我们如何区分以下两种情况呢?

案例1:该应用程序没有权限,之前未向用户询问过该权限.在这种情况下,shouldShowRequestPermissionRationale()将返回false,因为这是我们第一次询问用户.

情况2:用户已拒绝该权限并选择"不再询问",在这种情况下,shouldInShowRequestPermissionRationale()也将返回false.

我想将用户发送到案例2中的应用程序设置页面.我如何区分这两种情况?

permissions android android-6.0-marshmallow

137
推荐指数
5
解决办法
6万
查看次数

AlertDialog 中的样式单选按钮和文本

我想在带有自定义样式的 AlertDialog 中显示一个单选列表,例如 这个.

所以我创建了一个自定义主题并将其作为参数提供给 AlertDialog.Builder 的构造函数。

这是显示对话框的代码:

private void showSortDialog() {
final CharSequence[] options = new String[] {"Relevance", "Newest"};
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivityReference(),
                                                          R.style.RadioDialogTheme);
    builder.setTitle("Sort by");
    builder.setSingleChoiceItems(options, -1, new DialogInterface.OnClickListener() {
    . . . . 
    builder.create().show();
}
Run Code Online (Sandbox Code Playgroud)

这是样式:

<style name="RadioDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColorAlertDialogListItem">@drawable/radiobutton_textcolor_selector
    </item>
    <item name="android:listChoiceIndicatorSingle">@drawable/apptheme_btn_radio_holo_light
    </item>
</style>
Run Code Online (Sandbox Code Playgroud)

我能够找到我在样式中添加的几个属性,以根据它们的状态更改单选按钮/文本的颜色。但我无法自定义文本外观(我想更改大小、提供填充等)。

我确定有一些属性可以用来设置文本的样式,但我找不到它。任何人都可以帮我解决这个问题吗?谢谢。

android android-theme android-alertdialog android-styles

13
推荐指数
1
解决办法
6122
查看次数

如何在Android中动态合并两个Drawable?

所以我有两个不同的Drawables需要合并并Drawable在运行时获得一个.我希望第一个Drawable位于顶部,另一个位于底部.我遇到了LayerDrawable它,看起来它正是我所需要的,但我在努力安排它时遇到了麻烦Drawables.

所以我有一个ImageButton48x48 dp,这是最终Drawable的结果.第一个Drawable是加号按钮(20x20 dp),第二个是dp加号按钮下方的小点(4x4 ).

加号按钮Drawable使用字体字形加载.我正在Drawable使用这个xml片段创建点按钮:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
       android:shape="oval">
    <solid
        android:color="@color/white_40"/>
    <size
        android:width="4dp"
        android:height="4dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

我的第一种方法是只既能补充DrawablesLayerDrawable,但是当我这样做,宽度/高度在XML中指定的点被忽略的属性,并将其延伸到覆盖的加号图标.

LayerDrawable finalDrawable = new LayerDrawable(new Drawable[] {plusIcon, dotIcon});
Run Code Online (Sandbox Code Playgroud)

以上结果如下:



我尝试的第二种方法是setLayerInset尝试定位两者Drawables.

    LayerDrawable finalDrawable = new LayerDrawable(new Drawable[] {plusIcon, dotIcon});
    finalDrawable.setLayerInset(0, 0, 0, 0, 0);
    finalDrawable.setLayerInset(1, dp(22), dp(44), dp(22), 0);
Run Code Online (Sandbox Code Playgroud)

上面的代码片段最终将点放在正确的位置,但它也开始影响加号按钮的位置和大小,最终看起来像这样: …

android drawable android-layout android-drawable layerdrawable

9
推荐指数
1
解决办法
4477
查看次数

使用RecyclerView时静态ViewHolder和获取上下文

我正在尝试使用回收器视图并处理单击事件.我已经阅读了在回收站视图项上处理onClick事件的各种方法,例如:

  1. 在视图持有者类本身内定义单击侦听器.
  2. 在onCreateViewHolder()中定义单击侦听器.
  3. 定义一个接口,然后从那里开始(似乎太多的工作).

所以我的第一个问题是哪个选项更好?我目前正在使用第一种方法,如果在视图持有者类中定义单击侦听器本身就是方法,那么如何使用适配器中的上下文,因为视图持有者类是静态的.

基本上,我想拥有一个静态视图持有者,并且在click事件上,打开一个我需要上下文的新Activity.

更新:添加适配器和ViewHolder代码.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private Context mContext;
    private List<Job> jobs;

    public MyAdapter(Context context, List<Job> jobs) {
        mContext = context;
        this.jobs = jobs;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View itemLayoutView = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.list_item, viewGroup, false);

        itemLayoutView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext, MyActivity.class);
                mContext.startActivity(intent);
            }
        });

        return new ViewHolder(itemLayoutView);
    }

    @Override
    public void onBindViewHolder(WorkExperienceAdapter.ViewHolder viewHolder, int i) {
            //bindViewHolder code
        } …
Run Code Online (Sandbox Code Playgroud)

android onclick android-recyclerview

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

PagerSnapHelper 中的从到页面更改了侦听器

我正在PagerSnapHelper水平使用RecyclerView以实现类似行为的视图寻呼机。

final PagerSnapHelper pagerSnapHelper = new PagerSnapHelper(); pagerSnapHelper.attachToRecyclerView(recyclerView);

它工作得很好,但我希望能够在用户向任一方向更改页面时获得回调。所以像,onSwipeLeft/onSwipeRight回调。

我尝试使用findTargetSnapPositionin PagerSnapHelper,但这只会给我targetIndex而不是当前索引。我尝试过这样的事情,但它并不是一直有效。

@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
    final int targetPos = super.findTargetSnapPosition(layoutManager, velocityX, velocityY);

    final View currentView = findSnapView(layoutManager);
    final int currentPos = layoutManager.getPosition(currentView);

    if (currentPos < targetPos) {
        callback.onSwipeRight();
    } else if (currentPos > targetPos) {
        callback.onSwipeLeft();
    }

    return targetPos;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标并始终有效?谢谢!

android android-support-library android-recyclerview pagersnaphelper

3
推荐指数
1
解决办法
2627
查看次数