我想在后台线程中运行一些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能够以"干净"的方式做到这一点,我就会徘徊.
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.我想知道他们是如何省略它的.
我应该如何在AdapterView上使用ActionBarSherlock实现多选,因为它不提供MultiChoiceModeListener?
这就是它的样子

你怎么能这样做?
android actionbarsherlock android-actionbar contextual-action-bar
我按照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) 好吧,这是我用这个例子做的
通过命令生成密钥
$ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android
复制粘贴在Google API控制台+我的包名称中的SHA1总和:
总和; com.my.package
在Google API控制台的同一项目中启用了Google Map API v2
将其复制到元数据中的Manifest应用程序.
通过SDK管理器下载并导入google-play-services_lib项目并将其作为库项目引用.以及ActionBarSherlock.
在启动之前,我确保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) 使用相对布局时,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版本的"绘制-nodpi"的支持?将图像放入"res/drawable-nodpi"并期望它们至少从2.0(Eclair)开始在所有Android版本中工作是否安全?
所以我按下了Do not show this dialog in the future(截图来自网页).

已经有一段时间了,现在我想更改默认的重新格式化行为.
我似乎无法找到再次显示此对话框的选项.
我制作了一个三个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编写我自己的动画)?
我已经为一个目录注册了一个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 ×9
android-maps ×1
animation ×1
fileobserver ×1
gradle ×1
handler ×1
java ×1
proguard ×1