小编nat*_*olf的帖子

Shape Drawable gradientRadius仅适用于像素.这不是没用的吗?%值不起作用

我想使用带有径向渐变的shape drawable作为View的背景.根据javadoc,渐变的半径可以设置为特定值(可能是像素)或百分比:

机器人:gradientRadius

渐变的半径,仅用于径向渐变.

可能是浮点值,例如"1.2".

可以是小数值,它是附加%或%p的浮点数,例如"14.5%".%后缀总是表示基本大小的百分比; 可选的%p后缀提供相对于某个父容器的大小.

如果我错了,请纠正我,但在这里使用像素值是完全没用的,因为这个渐变看起来完全不同于一个屏幕密度到另一个(测试,是的,这是真的).我试着使用%和%p值,但它们根本不起作用.

我深入研究了Android源代码,了解了如何处理gradientRadius并在GradientDrawable类中找到它:

TypedValue tv = a.peekValue(
    com.android.internal.R.styleable.GradientDrawableGradient_gradientRadius);
    if (tv != null) {
        boolean radiusRel = tv.type == TypedValue.TYPE_FRACTION;
        st.mGradientRadius = radiusRel ?
         tv.getFraction(1.0f, 1.0f) : tv.getFloat();
    } else ...
}
Run Code Online (Sandbox Code Playgroud)

啊哈!因此,所有添加%或%p确实将我的值除以100.(我测试了这一点,因为TypeValue.getFraction()的文档更加不清楚).65%变为0.65.有道理,但没有用处.

那么使用gradientRadius的最佳方法是什么?

PS.我使用GradientDrawable以编程方式添加了我的背景,我得到了理想的结果.我使用GradientDrawable.setGradientRadius()来获取相对于视图宽度的值,并在设备之间获得一致的渐变.

android android-drawable

16
推荐指数
1
解决办法
2791
查看次数

DialogFragment大小(宽度)被忽略

我正在使用DialogFragment并发现当我创建一个内部LinearLayout的layout_width = match_parent时,宽度总是变为全屏,无论我试图通过固定父视图的layout_width和minWidth强制设置多少约束,或者设置布局CreateView()中的维度

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/dialog_width"
android:layout_height="@dimen/dialog_height"
android:minWidth="@dimen/dialog_width"
android:minHeight="@dimen/dialog_height"
android:orientation="vertical" 
android:paddingTop="5dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    ...
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

Dialog.java

public class MyDialog extends DialogFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ...
        Resources r = getActivity().getResources();
        getDialog().getWindow().setLayout( (int)r.getDimension(R.dimen.dialog_width), (int)r.getDimension(R.dimen.dialog_height));
        return view;
    }
}
Run Code Online (Sandbox Code Playgroud)

我能做到这一点的唯一方法是设置内部LinearLayout layout_width ="@ dimen/dialog_width

hacked dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
... >

<LinearLayout
    android:layout_width="@dimen/dialog_width"
    android:layout_height="wrap_content">
    ...
    </LinearLayout>
...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但对对话的其他部分有一些影响.这是Android中的错误吗?

android android-dialogfragment

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

毕加索产生OutOfMemoryError

我们正在使用Picasso加载我们应用中的所有图像,从小型头像到大型全屏图像,我们每10个活跃用户就会收到其中一个错误.Picasso缓存正在填补,但我们理解它应该保持自己.

我们的日志表明,在高端设备(Galaxy S4)上加载大型全屏图像(1080x1920)和大型化身(720x720)时,这些错误最常出现,但偶尔会出现在小型化身(135x135)上.

com.couchsurfing.mobile.data.PicassoException: Error while loading image with Picasso
       at com.couchsurfing.mobile.data.DataModule$1.onImageLoadFailed(DataModule.java:158)
       at com.squareup.picasso.Picasso.complete(Picasso.java:374)
       at com.squareup.picasso.Picasso$1.handleMessage(Picasso.java:97)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5419)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:525)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.RuntimeException: ===============BEGIN PICASSO STATS ===============
Memory Cache Stats
  Max Cache Size: 19173961
  Cache Size: 17988408
  Cache % Full: 94
  Cache Hits: 228
  Cache Misses: 244
Network Stats
  Download Count: 131
  Total Download Size: 3375735
  Average Download Size: 25768
Bitmap Stats
  Total Bitmaps Decoded: 206
  Total Bitmap …
Run Code Online (Sandbox Code Playgroud)

picasso

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