冰淇淋三明治引入了许多新的UI设计元素,但市场渗透率仍然只有4%左右.如果一个人想要面向未来的应用并利用蜂窝/冰淇淋三明治引入的一些设计元素,例如动作栏,配色方案等,那么确保你保持一些向后调整的最佳方法是什么兼容性?
该应用程序有一个ActionBar,ActionBar有导航选项卡,每个选项卡都包含文本.除了文本之外,我还需要在选项卡中添加图标.
我已ActionBar.Tab.setIcon(drawable)成功添加图标,但图标显示在选项卡文本的左侧.
如何移动选项卡图标使其超出导航选项卡文本?
(我正在使用ActionBarSherlock,但认为解决方案将适用于本机和ABS实现)
Android设计指南规定启动器图标应为48dp,每侧有1dp填充,这意味着实际图标的大小为46dp(假设为方形图标).https://www.google.com/design/spec/style/icons.html#icons-product-icons
但是,当我在Android Studio中使用启动器图标创建工具(从图像中)时,它会创建一个图片,其填充比其更多(它不是来自源图像).例如我的mipmap-xxxhdpi资产是预期的192x192px,但不包括填充Android Studio添加的图标只有160x164px,相当于40dp,而不是48dp.
在我看来,Android Studio未能采用有关启动器图标的Android设计指南,并且添加了比所需更多的填充,但我发布在这里以防我遗漏了一些东西.
更新,添加了一个显示扩展填充的示例.
在我有一个将从一个单独的线程(使用AsyncTask)更新的UI的场景中,我可以将AsyncTask定义为活动的内部类,但是这有两个缺点我发现有问题:
什么是好的解决方案?使用内部类,但将它所做的一切都抽象到其他类?将对Activity的引用传递给AsyncTask?总是将AsyncTask类定义为内部类,只接受源文件会很大?
我有各种不同像素密度的完整图像集,我需要将位图资源放入drawables文件夹(在MDPI中)以用作默认资源(以防止像素密度设备崩溃,我没有照顾,例如xhdpi),但这意味着将drawable-mdpi中的资源复制到drawable文件夹中.
因为重复显然很糟糕,我想知道是否应该删除drawable-mdpi文件夹,并将我的MDPI资源保存在(默认)drawable文件夹中
或者我错过了什么?
为什么我的片段没有在步骤4中显示?我已经将片段添加到后台堆栈,所以为什么(当Back按钮看起来已经知道它存在时)它是否显示片段?
这是我在Activity 2中用来打开Fragment A的代码.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_profile_edit);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
transaction.addToBackStack(null);
transaction.add(android.R.id.content, new MyFragment());
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
这是打开Fragment B的代码
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
transaction.add(android.R.id.content, new MyOtherFragment());
transaction.commit();
Run Code Online (Sandbox Code Playgroud) 我想使用Proguard来混淆应用程序的代码.我不需要优化,我也不需要Proguard去除任何类或方法.我想要的只是混淆.该应用程序使用多个库项目.
我一直在撞墙试图让它发生,而且它不按我想要的方式工作.我在应用程序中看到NoSuchMethodExceptions在执行时被抛出,尽管我认为我已经关闭了Proguard的缩小选项.
有什么神奇的设置让Proguard JUST混淆,而不是优化掉任何代码?
UPDATE.我通过反复试验证实,导致NoSuchMethodExceptions的是混淆过程(不是优化或收缩).
Proguard.cfg
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontshrink
-keep public class * extends Object
-keep class com.myapp.** { *; }
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.myapp.activity.Splash
-keep public class com.myapp.alarm.AlarmsViewer
-keep public class com.myapp.activity.About
-keep public class com.myapp.activity.Base
-keep public class com.myapp.activity.BaseWithMenu
-keep public class …Run Code Online (Sandbox Code Playgroud) 该应用程序包含SQLite数据库中的数据.UI主要是RecyclerView.问题是如何最好地将数据从数据库传输到UI,同时避开主线程?
我原计划使用CursorLoader,ContentProvider和RecyclerView.但阅读它看起来像RecyclerView没有对Cursor提供的数据的开箱即用支持.荡.
那给我留下了一些其他选择......
AsyncTask加载数据,将其放入模型对象,并传递到RecyclerView适配器.除了丑陋之外,它不是配置改变友好的.
一个自定义Loader,它从SQL加载数据并将其推送到模型对象中.
使用Cursor加载器,当它返回Cursor迭代它时将数据推送到模型对象.我怀疑这会发生在主线程上,可能会损害性能.
使用Otto发送请求数据的请求消息,然后通过返回消息返回模型对象集合.可能有大约500个物体,所以我想我可能宁愿滥用奥托这样做.
如果我使用的是模型对象的集合而不是Cursor我看到ContentProvider的好处较少,而且我也失去了UI在数据更改时自动刷新的能力(这可能很有用).
这些选项都没有吸引力,有没有更好的方法?该应用程序在时间压力下,所以无论它需要相当快速实施.不幸的是,UI需要水平滚动并且只针对Lollipop,所以RecyclerView似乎比ListView更好.
android android-contentprovider android-cursorloader android-sqlite android-recyclerview
我已成功安装了适用于Jelly Bean v4.1的Intel AVM,我可以创建并启动Intel x86 AVM.然而,它和ARM一样慢.浪费了很多时间,据我所知,英特尔仿真并不比ARM图像更快.
我确实安装了HAXM,并且在启动模拟器时会出现一条消息,表明它正在"快速"模式下运行,但它肯定不会很快!
这是因为我的PC(Windows 7,Intel)不兼容,还是我错过了什么?我如何检查兼容性?
我有一个ImageView,你可以用来做一个手指平移,或两个手指刻度.它工作正常.我已经扩展它来处理旋转,它的行为引起了一些混乱.
当存在多触摸事件时,调用此方法,该方法应返回以度为单位的旋转角度.它没有做我期望的事情.
private int fingersAngle(MotionEvent event)
{
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
int degrees = (int)(Math.toDegrees(Math.atan2(y, x)));
return degrees;
}
Run Code Online (Sandbox Code Playgroud)
当我旋转两根手指时,我希望输出像......
158 166 168 169 174 176 179 181等
但实际上我得到的更像是这样的:
158 166 -179 179 -179 179 -179
问题似乎有迹象.这种方法如何知道它是180还是-180,还是90或-270?图像经常以错误的方式旋转,然后突然跳跃并开始以相反的方式旋转.更糟糕的是,它最初旋转的方向实际上是随机的.
我正在使用Nexus One测试应用程序,但在Advent Vega平板电脑上也看到了同样的问题.两台设备都能正常使用3D地图中的Google地图来旋转屏幕(如果有时有点跳动),所以证据并不表示硬件限制.
第二个问题是,当两个手指大致垂直或水平对齐时,角度根本不会改变,因此旋转"粘住"大约10-20度的顶部/底部/左/右.
目前我正在检查角度是否突然改变了很大的数量,如果是这样的话,从360减去它.丑陋的地狱,但它有点帮助.
希望你们中的一个人之前已经看过这个,并且知道如何从多点触控手势中提取角度旋转.
Android中的一些东西是如此简单,令人惊叹,但像这样的东西是非常痛苦的.