小编Oll*_*e C的帖子

如何在使用Android API Level 15时保持向后兼容性?

冰淇淋三明治引入了许多新的UI设计元素,但市场渗透率仍然只有4%左右.如果一个人想要面向未来的应用并利用蜂窝/冰淇淋三明治引入的一些设计元素,例如动作栏,配色方案等,那么确保你保持一些向后调整的最佳方法是什么兼容性?

user-interface android actionbarsherlock

10
推荐指数
1
解决办法
5943
查看次数

将选项卡文本上方的ActionBar导航选项卡图标对齐?

该应用程序有一个ActionBar,ActionBar有导航选项卡,每个选项卡都包含文本.除了文本之外,我还需要在选项卡中添加图标.

我已ActionBar.Tab.setIcon(drawable)成功添加图标,但图标显示在选项卡文本的左侧.

如何移动选项卡图标使其超出导航选项卡文本?

(我正在使用ActionBarSherlock,但认为解决方案将适用于本机和ABS实现)

android actionbarsherlock android-actionbar

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

为什么这么多Android Studio启动器图标填充?

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设计指南,并且添加了比所需更多的填充,但我发布在这里以防我遗漏了一些东西.

更新,添加了一个显示扩展填充的示例.

图标

android android-studio

10
推荐指数
0
解决办法
1184
查看次数

如何从Android AsyncTask进行活动UI更改?

在我有一个将从一个单独的线程(使用AsyncTask)更新的UI的场景中,我可以将AsyncTask定义为活动的内部类,但是这有两个缺点我发现有问题:

  1. 它使源文件非常大,降低了管理代码的效率
  2. 这使得重用线程类变得困难

什么是好的解决方案?使用内部类,但将它所做的一切都抽象到其他类?将对Activity的引用传递给AsyncTask?总是将AsyncTask类定义为内部类,只接受源文件会很大?

oop android android-asynctask

9
推荐指数
2
解决办法
8987
查看次数

使用drawable文件夹中的默认资源(MDPI大小)drawable-mdpi文件夹的重点是什么?

我有各种不同像素密度的完整图像集,我需要将位图资源放入drawables文件夹(在MDPI中)以用作默认资源(以防止像素密度设备崩溃,我没有照顾,例如xhdpi),但这意味着将drawable-mdpi中的资源复制到drawable文件夹中.

因为重复显然很糟糕,我想知道是否应该删除drawable-mdpi文件夹,并将我的MDPI资源保存在(默认)drawable文件夹中

或者我错过了什么?

resources android drawable

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

为什么Fragment.addToBackStack()导致Back按钮什么都不做?

  1. 活动1可见.按一个按钮,活动2打开.
  2. 活动2将片段A添加到自身(和后台堆栈),它显示正常
  3. 按下片段内的按钮可转换为另一个片段B.
  4. 按返回.什么都没发生.咦?背压似乎被吸收而没有作用,显示器保持不变.
  5. 再次按Back,它会按预期恢复到活动1.

为什么我的片段没有在步骤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)

android

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

Android和Proguard - 如何混淆,但不优化任何代码?

我想使用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)

android proguard

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

SQLite数据到RecyclerView

该应用程序包含SQLite数据库中的数据.UI主要是RecyclerView.问题是如何最好地将数据从数据库传输到UI,同时避开主线程?

我原计划使用CursorLoader,ContentProvider和RecyclerView.但阅读它看起来像RecyclerView没有对Cursor提供的数据的开箱即用支持.荡.

那给我留下了一些其他选择......

  1. AsyncTask加载数据,将其放入模型对象,并传递到RecyclerView适配器.除了丑陋之外,它不是配置改变友好的.

  2. 一个自定义Loader,它从SQL加载数据并将其推送到模型对象中.

  3. 使用Cursor加载器,当它返回Cursor迭代它时将数据推送到模型对象.我怀疑这会发生在主线程上,可能会损害性能.

  4. 使用Otto发送请求数据的请求消息,然后通过返回消息返回模型对象集合.可能有大约500个物体,所以我想我可能宁愿滥用奥托这样做.

如果我使用的是模型对象的集合而不是Cursor我看到ContentProvider的好处较少,而且我也失去了UI在数据更改时自动刷新的能力(这可能很有用).

这些选项都没有吸引力,有没有更好的方法?该应用程序在时间压力下,所以无论它需要相当快速实施.不幸的是,UI需要水平滚动并且只针对Lollipop,所以RecyclerView似乎比ListView更好.

android android-contentprovider android-cursorloader android-sqlite android-recyclerview

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

即使使用英特尔图像,Android模拟器仍然很慢,为什么?

我已成功安装了适用于Jelly Bean v4.1的Intel AVM,我可以创建并启动Intel x86 AVM.然而,它和ARM一样慢.浪费了很多时间,据我所知,英特尔仿真并不比ARM图像更快.

我确实安装了HAXM,并且在启动模拟器时会出现一条消息,表明它正在"快速"模式下运行,但它肯定不会很快!

这是因为我的PC(Windows 7,Intel)不兼容,还是我错过了什么?我如何检查兼容性?

android android-emulator

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

如何从双指多点触控事件中获得旋转度?

我有一个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中的一些东西是如此简单,令人惊叹,但像这样的东西是非常痛苦的.

java android android-layout

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