小编Ven*_*r85的帖子

自定义视图的attrs.xml中具有相同名称的属性

我正在写一些自定义视图,它们共享一些同名的属性.在他们各自的<declare-styleable>部分,attrs.xml我想对属性使用相同的名称:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView1">
        <attr name="myattr1" format="string" />
        <attr name="myattr2" format="dimension" />
        ...
    </declare-styleable>

    <declare-styleable name="MyView2">
        <attr name="myattr1" format="string" />
        <attr name="myattr2" format="dimension" />
        ...
    </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,说明myattr1并且myattr2已经定义了.我发现我应该省略formatfor myattr1myattr2in 的属性MyView2,但如果我这样做,我在控制台中获得以下错误:

[2010-12-13 23:53:11 - MyProject] ERROR: In <declare-styleable> MyView2, unable to find attribute 
Run Code Online (Sandbox Code Playgroud)

有没有办法可以实现这一点,也许某种命名空间(只是猜测)?

android android-custom-view android-view android-custom-attributes

166
推荐指数
4
解决办法
3万
查看次数

在Android 5 Lollipop上打破的ListViewDraggingAnimation

我使用ListViewDraggingAnimation通过的DevBytes,但似乎在Android棒棒糖开发者预览版2(LPX13D)打破.当我在其他行上拖动一行时,这些行将消失并变得不再可点击(见下文).我尝试禁用listview的硬件加速,但它没有任何效果.

例

有没有人遇到过同样的问题?任何提示?谢谢 :)

android android-listview android-5.0-lollipop

29
推荐指数
3
解决办法
3538
查看次数

checkSelfPermission使用targetSdkVersion <= 22返回PERMISSION_GRANTED以获取已撤销的权限

我正在研究Android Marshmallow的新权限模型,但我面临一个我觉得奇怪的问题.

一个targetSdkVersion22 的应用程序(尚未使用Android Marshmallow的新权限模型)声明READ_CONTACTS清单中的权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />
Run Code Online (Sandbox Code Playgroud)

并尝试通过以下方式阅读联系人的电话号码Intent.ACTION_PICK:

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
Run Code Online (Sandbox Code Playgroud)

在使用Marshmallow MRA58K的设备上运行时,在通过ADB安装应用程序后撤销权限后,该ContextCompat.checkSelfPermission()方法仍然返回PERMISSION_GRANTED,但是访问联系人后操作失败,因为返回了没有记录的游标.据我了解,这是避免遗留应用崩溃的默认"逆向兼容性"策略.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_CONTACT_REQUEST && resultCode == Activity.RESULT_OK) {
        Log.i("", "Permission granted: " + (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED));
        Uri contactUri = data.getData();
        Cursor c = null;
        try {
            c = getContentResolver().query(contactUri, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
            if (c != null && …
Run Code Online (Sandbox Code Playgroud)

android android-6.0-marshmallow

18
推荐指数
1
解决办法
7251
查看次数

尝试使用ConstraintLayout复制GridLayout列对齐

我是ConstraintLayout的新手,我正在尝试使用ConstraintLayout复制GridLayout提供的相同网格行为.

具体来说,我想设计一个两列网格.第一列宽度应尽可能窄,而第二​​列应占用所有剩余的水平空间.当然,第二列应该位于第一列的右侧,或者更确切地说,位于第一列的最宽视图.

我不知道如何使用ConstraintLayout复制最后一个要求.我不想在两列之间使用网格线,因为第一列不应该具有固定的宽度和百分比宽度,而是应该与其最宽的视图一样宽.

https://gist.github.com/venator85/499dd82f47b3efbbed7a1e9e1ca1412d我准备了一个布局示例和相应的预览,显示了一个实现我想要的GridLayout.在该布局中的前两个ConstraintLayout尝试显示C1和D1与B1对齐,C2和D2与B2对齐.当B2比A2窄时,A1和C1将重叠.

有帮助吗?

谢谢

android android-layout android-gridlayout android-constraintlayout

18
推荐指数
1
解决办法
9721
查看次数

NineOldAndroids:设置视图枢轴

我正在使用奇妙的框架NineOldAndroids,但我找不到任何东西来设置我的动画视图的轴心.具体来说,我试图做一个scaleX+ scaleY动画与左上边缘的支点,所以pivotX= 0和pivotY= 0的Honeycomb和超越,我只想设置myView.setPivotX(0)myView.setPivotY(0),但如何做到这一点与NineOldAndroids预蜂窝设备?我尝试了以下方法:

AnimatorSet set = new AnimatorSet();
set.playTogether(
    ObjectAnimator.ofFloat(myView, "pivotX", -(myView.getWidth() / 2), -(myView.getWidth() / 2)),
    ObjectAnimator.ofFloat(myView, "pivotY", -(myView.getHeight() / 2), -(myView.getHeight() / 2)),
    ObjectAnimator.ofFloat(myView, "scaleX", 0, 1),
    ObjectAnimator.ofFloat(myView, "scaleY", 0, 1),
    ObjectAnimator.ofFloat(myView, "alpha", 0, 1)
);
set.setDuration(1000).start();
Run Code Online (Sandbox Code Playgroud)

但它不起作用,枢轴停留在视图的中心.

你能帮我吗?

谢谢 ;)

android android-animation

15
推荐指数
2
解决办法
6895
查看次数

在Android上禁用蓝牙可发现模式

我在Android文档中找到了如何打开蓝牙可发现性模式:

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
Run Code Online (Sandbox Code Playgroud)

这将使设备可被发现300秒(文档).

我的问题是:在超时发生之前如何关闭可发现性?我想在"设置"|"无线和网络"|"蓝牙设置"小程序中复制相应的设置,以便通过单击打开和关闭可发现性.

有帮助吗?

android bluetooth

12
推荐指数
1
解决办法
9416
查看次数

绘制带圆角的LinearLayout

我正在尝试实现一个使用圆角绘制自己的LinearLayout子类.根据我的研究,我设置setWillNotDraw(false)并覆盖onDraw()在画布上绘制一个圆角矩形:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
            | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
    canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
    canvas.restoreToCount(sc);
}
Run Code Online (Sandbox Code Playgroud)

哪里:

drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
Run Code Online (Sandbox Code Playgroud)

DST_IN这里似乎是正确的选择(根据APIDemos示例),但应该是透明的区域(圆形的)具有黑色背景,并且子项的角仍然可见.这是使用Android 4.2.2的Galaxy Nexus的结果:

例

任何提示?

编辑:这是我想要实现的,抱歉photoshopping的粗糙:)

在此输入图像描述

编辑2:我向GitHub添加了一个可运行的示例项目:https://github.com/venator85/RoundClippingLayout

谢谢 ;)

android android-canvas

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

为ActionBar的向上按钮设置contentDescription

我正在尝试自定义与" 我正在使用ActionBarSherlock" contentDescription的向上按钮相关联的"向上导航"默认值ActionBar.

ActionBarView来源:

public void setHomeButtonEnabled(boolean enable) {
    mHomeLayout.setEnabled(enable);
    mHomeLayout.setFocusable(enable);
    // Make sure the home button has an accurate content description for accessibility.
    if (!enable) {
        mHomeLayout.setContentDescription(null);
    } else if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
        mHomeLayout.setContentDescription(mContext.getResources().getText(
                R.string.abs__action_bar_up_description));
    } else {
        mHomeLayout.setContentDescription(mContext.getResources().getText(
                R.string.abs__action_bar_home_description));
    }
}
Run Code Online (Sandbox Code Playgroud)

所以关键是如何获得参考mHomeLayout.getWindow().getDecorView().findViewById(android.R.id.home)不起作用,因为它返回一个ImageView.

我该怎么办?

谢谢 ;)

android accessibility actionbarsherlock android-actionbar

8
推荐指数
3
解决办法
5201
查看次数

手动将本地文件添加到"下载"应用程序

我的应用程序需要下载文件,我正在查看DownloadManager,但它有一些不适合我的情况(身份验证,命名方案,验证)的限制,所以我制作了自定义下载引擎.

是否可以手动将使用我的引擎下载的文件(因此使用本地URL)添加到下载系统应用程序的列表中?我的理解是列表由系统内容提供者填充.是否可以在没有DownloadManager尝试下载文件的情况下向其中添加记录?

谢谢 ;)

android download download-manager

7
推荐指数
1
解决办法
1104
查看次数

在调用显示ProgressDialog的新Activity后隐藏键盘

我在屏幕键盘上遇到了麻烦.我有一个EditText显示键盘的活动,以及一个进入第二个活动的按钮.第二个活动显示了ProgressDialogonCreate(),做了什么,并解散了ProgressDialog.问题是ProgressDialog显示时,键盘也是如此.

我希望键盘在创建之前消失ProgressDialog.我搜索了StackOverflow和其他网站,但似乎没有任何东西可以用于这个特定的场景.

我附上两张照片供你参考:

http://i45.tinypic.com/2rzq7b6.png http://i45.tinypic.com/34ret1z.png

这是第一个活动的代码:

public class FirstActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这是第二个活动的代码:

public class SecondActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);

        // TODO: hide keyboard here

        final ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", …
Run Code Online (Sandbox Code Playgroud)

android dialog progressdialog android-input-method android-activity

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