我正在写一些自定义视图,它们共享一些同名的属性.在他们各自的<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 myattr1和myattr2in 的属性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
我使用ListViewDraggingAnimation通过的DevBytes,但似乎在Android棒棒糖开发者预览版2(LPX13D)打破.当我在其他行上拖动一行时,这些行将消失并变得不再可点击(见下文).我尝试禁用listview的硬件加速,但它没有任何效果.

有没有人遇到过同样的问题?任何提示?谢谢 :)
我正在研究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) 我是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
我正在使用奇妙的框架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文档中找到了如何打开蓝牙可发现性模式:
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
Run Code Online (Sandbox Code Playgroud)
这将使设备可被发现300秒(文档).
我的问题是:在超时发生之前如何关闭可发现性?我想在"设置"|"无线和网络"|"蓝牙设置"小程序中复制相应的设置,以便通过单击打开和关闭可发现性.
有帮助吗?
我正在尝试实现一个使用圆角绘制自己的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
谢谢 ;)
我正在尝试自定义与" 我正在使用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.
我该怎么办?
谢谢 ;)
我的应用程序需要下载文件,我正在查看DownloadManager,但它有一些不适合我的情况(身份验证,命名方案,验证)的限制,所以我制作了自定义下载引擎.
是否可以手动将使用我的引擎下载的文件(因此使用本地URL)添加到下载系统应用程序的列表中?我的理解是列表由系统内容提供者填充.是否可以在没有DownloadManager尝试下载文件的情况下向其中添加记录?
谢谢 ;)
我在屏幕键盘上遇到了麻烦.我有一个EditText显示键盘的活动,以及一个进入第二个活动的按钮.第二个活动显示了ProgressDialog它onCreate(),做了什么,并解散了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