小编dev*_*ole的帖子

Android - 从代码中引用当前应用主题中的属性值

Android devGuide 解释了如何使用问号(?)代替at(@)来引用当前应用主题中属性的值.

有没有人知道如何从代码中做到这一点,例如在自定义组件中?

android

11
推荐指数
1
解决办法
4769
查看次数

GLES20Canvas.clipPath中的UnsupportedOperationException,在视图上禁用了硬件加速

我在我的应用程序中启用了硬件加速,但是我已经禁用了我的一个观点,因为我遇到了中风帽等问题.

现在我在Google Play Crash Errors控制台中获得此堆栈跟踪:

java.lang.UnsupportedOperationException
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:287)
at com.myapp.MyCustomView.onDraw(SourceFile:288)
at android.view.View.draw(View.java:9310)
at android.view.View.getDisplayList(View.java:8773)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2298)
...
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:609)
at android.view.ViewRoot.draw(ViewRoot.java:1634)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1450)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2094)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
...
Run Code Online (Sandbox Code Playgroud)

android:hardwareAccelerated="true"在AndroidManifest.xml中指定了.但是我在自定义视图的构造函数中专门禁用了硬件加速:

    public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);

            // ... code omitted

            // disable acceleration because Paint.setStrokeCap(Cap.ROUND) is not working otherwise
            Compatibility.disableHardwareAcceleration(this);
    }
Run Code Online (Sandbox Code Playgroud)

兼容性是这样的:

public class Compatibility {
        // View.setLayerType() was introduced in Honeycomb
        private static Method setLayerTypeMethod = getMethod(View.class, "setLayerType", int.class, …
Run Code Online (Sandbox Code Playgroud)

android hardware-acceleration

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

Android屏幕大小和密度

我正在考虑放弃对我的应用程序中的小屏幕的支持.

最近我偶然发现了Screen Sizes和Densities,目前(2011-10-01)它说有3.5%的有源器件属于小型/ hdpi类别.我想知道什么设备实际上有一个高像素密度的小屏幕?

我知道HTC Wildfire有240 x 320像素,3.2英寸(~125 ppi像素密度).如果我理解正确,这将是一个ldpi设备.对于我的应用程序,Wildfire的份额约为2%.

首先,为什么Screen Sizes和Densities没有列出小/ ldpi下的任何内容?第二,小/ hdpi设备的例子是什么?

android screen

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

使用自定义Loader时,未在ViewPager片段上调用onResume()

精简版:

我有保持一个片段ViewPager显示其他两个片段,让我们称他们FragmentOneFragmentTwo.当启动应用程序时,该应用程序FragmentOne是可见的并且FragmentTwo在屏幕外,只有在向左滑动视图时才可见.

通常onStart(),onResume()应用程序启动后立即立即调用这两个片段.

我遇到的问题是当FragmentOne启动自定义时,Loader然后onResume()FragmentTwo它变得完全可见之前不会被调用.

显示问题的屏幕截图

问题:

这是我的代码问题还是Android支持库中的错误?(该库的修订版12没有出现问题,它从修订版13开始.)

如果它是修订版13和18中的错误,是否有解决方法?

我的自定义有问题Loader吗?

长版:

我已经构建了一个演示该问题的示例应用程序.我试图将代码减少到最低限度,但它仍然很多,所以请耐心等待.

我有一个MainActivity加载a MainFragment创建一个ViewPager.对于我的应用程序来说,ViewPager由Fragment而不是Activity维护是很重要的.

MainFragment创建一个FragmentPagerAdapter反过来创建片段FragmentOneFragmentTwo.

让我们从有趣的位开始,两个片段:

FragmentOne是一个ListFragment使用自定义Loader加载内容:

public class FragmentOne extends ListFragment implements LoaderCallbacks<List<String>> {
    private ArrayAdapter<String> adapter;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
        setListAdapter(adapter); …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager android-loader android-support-library

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

RecyclerView:如何在顶部模拟ListView的绘图选择器?

我想创建一个RecyclerView在其项目之上绘制选择器.它应该在项目的顶部呈现,这意味着我不能简单地设置StateListDrawable为项目背景.

我对压制状态特别感兴趣,即如果(并且仅当)按下某个项目,应该绘制一些东西.

RecyclerView.ItemDecoration能够绘制一个项目RecyclerView.这是我到目前为止所尝试的:

public final class ItemPressedDecoration extends RecyclerView.ItemDecoration {
    private final Rect rect = new Rect();

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        final int count = parent.getChildCount();
        for (int index = 0; index < count; index++) {
            final View child = parent.getChildAt(index);
            if (child.isPressed()) {
                drawOverlay(c, child);
            }
        }
    }

    private void drawOverlay(Canvas c, View child) {
        c.save();
        rect.set(child.getLeft(), child.getTop(), child.getRight(), child.getBottom());
        c.clipRect(rect);
        c.drawColor(0x80ff0000);
        c.restore();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是, …

android android-appcompat android-support-library android-recyclerview

5
推荐指数
2
解决办法
4680
查看次数