小编Yar*_*lyk的帖子

在后台线程中运行处理程序消息

我想在后台线程中运行一些Runnable.我想使用Handler,因为它很方便延迟.我的意思是

handler.post(runnable, delay);
Run Code Online (Sandbox Code Playgroud)

其中runnable应该在后台 Thread中运行.是否可以创建这样的Handler?在某处有"背景"Looper或者我该如何创建它?

PS我知道如何使用自定义类扩展Thread,但它需要比处理程序方式更多的编码工作.所以请不要发布其他解决方案或类似的东西

handler.post(new Runnable() {
    @Override
    public void run() {
        new Thread() {
            @Override
            public void run() {
                //action
            }
        }.start();
    }
});
Run Code Online (Sandbox Code Playgroud)

如果Handler能够以"干净"的方式做到这一点,我就会徘徊.

java multithreading android handler

38
推荐指数
3
解决办法
3万
查看次数

在按下音量或最小化还原后,沉浸模式导航变得粘滞

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.getWindow().getDecorView().setSystemUiVisibility(getSystemUiFlags());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private static int getSystemUiFlags() {
            return View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
    }

}
Run Code Online (Sandbox Code Playgroud)

第一次开始后

第一次开始后

按下音量按钮后或按下最近的应用程序两次后

在此输入图像描述

我看到QuickPic应用程序没有这个bug.我想知道他们是如何省略它的.

android android-fullscreen

29
推荐指数
3
解决办法
3万
查看次数

如何在ActionBarSherlock中实现多选和Contextual ActionMode?

我应该如何在AdapterView上使用ActionBarSherlock实现多选,因为它不提供MultiChoiceModeListener?

这就是它的样子

上下文行动模式

你怎么能这样做?

android actionbarsherlock android-actionbar contextual-action-bar

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

Gradle和proguard:找不到参数的方法runProguard()[true]

我按照Proguard Gradle手册的建议配置了build.gradle

这是root build.gradle

buildscript {
    repositories {
        flatDir dirs: '/home/username/android-sdks/tools/proguard/lib'
        mavenCentral()
    }
    dependencies {                     
        classpath 'com.android.tools.build:gradle:0.5.+'
        classpath ':proguard'
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这是我项目的build.gradle

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':SomeLibraryProject')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    sourceSets {
        ...
    }

    task runProguardTask(type: proguard.gradle.ProGuardTask) {
    }

    signingConfigs {
        debug {
            storeFile file("./keystore/keystore")
            storePassword "******"
            keyAlias "******"
            keyPassword "*******"
        }

        release {
            runProguard true
            proguardFile 'proguard-android.txt'
            storeFile file("./releasekey/keystore")
            storePassword "******"
            keyAlias "********"
            keyPassword "*******"
        } …
Run Code Online (Sandbox Code Playgroud)

android proguard gradle

16
推荐指数
2
解决办法
3万
查看次数

Map API v2授权失败

好吧,这是我用这个例子做的

  1. 通过keytool获得调试密钥(确保调试密钥在首选项 - > Android - > Build中由eclipse使用)
  2. 通过命令生成密钥

    $ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android

  3. 复制粘贴在Google API控制台+我的包名称中的SHA1总和:

    总和; com.my.package

  4. 在Google API控制台的同一项目中启用了Google Map API v2

  5. 将其复制到元数据中的Manifest应用程序.

  6. 通过SDK管理器下载并导入google-play-services_lib项目并将其作为库项目引用.以及ActionBarSherlock.

  7. 在启动之前,我确保GooglePlayServices可用.

表现:

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>

<permission
    android:name="com.my.package.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

<uses-permission android:name="com.my.package.permission.MAPS_RECEIVE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

应用:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="debug_key"/>
Run Code Online (Sandbox Code Playgroud)

还添加了proguard的东西,但我现在没有混淆.

DrugstoresMapActivity扩展了SherlockFragmentActivity

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

    <fragment
        android:id="@+id/map_fragment"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

project.properties

target=android-17
android.library.reference.1=../google-play-services_lib
android.library.reference.2=../ActionBarSherlock
Run Code Online (Sandbox Code Playgroud)

ActionBarSherlock在libs中有android-support-v4,如果重要的话,不是主项目.

StartupActivity确保只有可用的服务才会启动DrugstoresMapActivity

private void attempt() { …
Run Code Online (Sandbox Code Playgroud)

android google-maps-api-2 android-maps

14
推荐指数
1
解决办法
7670
查看次数

具有自定义RelativeLayout的ActionBarSherlock不显示标题文本

使用相对布局时,ActionBar不显示标题.当我不使用RelativeLayout时,项目不对齐.请不要告诉我使用菜单项作为解决方案.它必须是定制的.

我是这样设置的:

    ActionBar bar = getSupportActionBar();
    bar.setDisplayOptions(
            ActionBar.DISPLAY_HOME_AS_UP |
            ActionBar.DISPLAY_SHOW_CUSTOM |
            ActionBar.DISPLAY_SHOW_HOME |
            ActionBar.DISPLAY_SHOW_TITLE |
            ActionBar.DISPLAY_USE_LOGO);

    bar.setTitle(title);
    bar.setCustomView(actionBar);
    this.setTitle(title);
Run Code Online (Sandbox Code Playgroud)

这是对齐好的时候,但标题没有显示

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

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true" >

        <ImageButton
            android:id="@+id/acion_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/menu_label_add"
            style="?attr/actionButtonStyle" />

        <ImageButton
            android:id="@+id/action_prev"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/menu_label_prev"
            style="?attr/actionButtonStyle" />

        <ImageButton
            android:id="@+id/action_next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/menu_label_next"
            style="?attr/actionButtonStyle" />

    </LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

截图

这里是标题显示的布局,但项目左对齐

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:gravity="right">

    <ImageButton
        android:id="@+id/acion_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/menu_label_add"
        style="?attr/actionButtonStyle" />

    <ImageButton
        android:id="@+id/action_prev"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/menu_label_prev"
        style="?attr/actionButtonStyle" …
Run Code Online (Sandbox Code Playgroud)

android actionbarsherlock

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

从哪个Android版本支持"drawable-nodpi"?

由于其Android版本"绘制-nodpi"的支持?将图像放入"res/drawable-nodpi"并期望它们至少从2.0(Eclair)开始在所有Android版本中工作是否安全?

android android-version android-drawable

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

IntelliJ IDEA:如何撤销重新格式化代码/优化导入对话框?

所以我按下了Do not show this dialog in the future(截图来自网页).

重新格式化代码对话框

已经有一段时间了,现在我想更改默认的重新格式化行为.

我似乎无法找到再次显示此对话框的选项.

intellij-idea android-studio

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

Loop AnimatorSet

我制作了一个三个ObjectAnimator的AnimatorSet,我想重复一遍.

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

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="0"
        android:valueTo="5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="600"
        android:valueFrom="5"
        android:valueTo="-5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="-5"
        android:valueTo="0"
        android:valueType="floatType"/>

</set>
Run Code Online (Sandbox Code Playgroud)

但是如果我将CycleInterpolator设置为AnimatorSet,因为动画师将会连续启动

public void setInterpolator(TimeInterpolator interpolator)在API级别11中添加

为此AnimatorSet的所有当前子动画设置TimeInterpolator.

所以我尝试通过设置一个监听器来重新启动AnimatorSet来循环,但它会停止几毫秒,并且重启AnimatorSet的效果是显而易见的.

a.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation)
    {
        animation.start();
    }
});
Run Code Online (Sandbox Code Playgroud)

我可以做什么来循环它(除了构建一个巨大的ObjectAnimator列表或使用Thread和Handler编写我自己的动画)?

animation android

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

FileObserver仅为文件接收CREATE或DELETE

我已经为一个目录注册了一个FileObserver.

this.observer = new DirectoryObserver(requested.getAbsolutePath(),
        FileObserver.CREATE | FileObserver.DELETE | FileObserver.DELETE_SELF);
this.observer.startWatching();
Run Code Online (Sandbox Code Playgroud)

在KitKat模拟器上测试.adb shell:

root@generic:/sdcard # echo "test" >> test.txt //notified CREATE
root@generic:/sdcard # rm test.txt //notified DELETE
root@generic:/sdcard # mkdir test //no events received
root@generic:/sdcard # rmdir test //no events received 
Run Code Online (Sandbox Code Playgroud)

DirectoryObserver供参考

private final class DirectoryObserver extends FileObserver {

    private DirectoryObserver(String path, int mask) {
        super(path, mask);
    }

    @Override
    public void onEvent(int event, String pathString) {
        switch (event) {
            case FileObserver.DELETE_SELF:
                //do stuff
                break;

            case FileObserver.CREATE:
            case FileObserver.DELETE:
                //do stuff …
Run Code Online (Sandbox Code Playgroud)

android fileobserver

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