我在PreferenceActivity中使用CheckboxPreference,在v21支持库中使用AppCompat主题.正如您所知,使用这个最新的库小部件,如复选框,editTexts,单选按钮等,都会使用主题中定义的辅助颜色进行着色.在首选项屏幕中,文本是由我的主题指定的正确颜色,但复选框和edittext不是.似乎当CheckboxPreference实例创建窗口小部件时,它不会将我的主题应用于它.
正常布局中的单选按钮,有色:
截图1 http://i59.tinypic.com/2qv9stj.png
来自CheckboxPreference的复选框,没有着色:
截图2 http://i61.tinypic.com/91bcly.png
我用作父主题Theme.AppCompat.Light.NoActionBar
.这种情况发生在Preference的每个子类中都有一个小部件,比如说EditTextPreference,其中EditText有一条黑色的底线,而不是有色的线.如何将色调应用于Preference子类显示的小部件?
更新:因为PreferenceActivity扩展了框架Activity,所以不应用着色.在工作案例中,我使用了支持库中的ActionBarActivity.现在的问题是:怎么了?
android tint android-appcompat android-preferences material-design
我在我的应用中使用AdMob.我遵循了实施指南,横幅正确显示并加载了广告.我的MainActivity负责创建引用,构建AdRequest并显示横幅,以及暂停,恢复和销毁AdView.每次加载AdRequest时,调用Activity的onStop()时,都会创建以下异常:
6706-6706/com.rocca.controlloSpese E/ActivityThread? Activity com.rocca.controlloSpese.MainActivity has leaked ServiceConnection com.google.android.gms.common.b@52b1cc3c that was originally bound here
android.app.ServiceConnectionLeaked: Activity com.rocca.controlloSpese.MainActivity has leaked ServiceConnection com.google.android.gms.common.b@52b1cc3c that was originally bound here
at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:970)
at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:864)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1577)
at android.app.ContextImpl.bindService(ContextImpl.java:1560)
at android.content.ContextWrapper.bindService(ContextWrapper.java:517)
at com.google.android.gms.ads.identifier.a.b(SourceFile:330)
at com.google.android.gms.ads.identifier.a.a(SourceFile:187)
at com.google.android.gms.ads.identifier.a.b(SourceFile:239)
at com.google.android.a.t.f(SourceFile:132)
at com.google.android.a.t.b(SourceFile:182)
at com.google.android.a.q.a(SourceFile:258)
at com.google.android.a.q.a(SourceFile:195)
at com.google.android.gms.ads.internal.m.a(SourceFile:107)
at com.google.android.gms.ads.internal.request.c.a(SourceFile:99)
at com.google.android.gms.ads.internal.util.b.run(SourceFile:17)
at com.google.android.gms.ads.internal.util.d.call(SourceFile:29)
at com.google.android.gms.ads.internal.util.e.call(SourceFile:49)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Run Code Online (Sandbox Code Playgroud)
接下来是这个信息:
6706-6781/com.rocca.controlloSpese I/AdvertisingIdClient? AdvertisingIdClient unbindService failed.
java.lang.IllegalArgumentException: Service not registered: com.google.android.gms.common.b@52b1cc3c
at …
Run Code Online (Sandbox Code Playgroud) 我发现了类似的问题,但无法找到最新的具体答案.我正在使用<preference-header>
,根据3.0+设置设计指南(我的目标4.1.2+)来构建我的标题; 我想为这些标题设置自定义布局.请注意,我不想回到此处所述的旧PreferenceScreen方法,因为我不支持较旧的Android版本.
据我所知,这个布局由PreferenceActivity类的私有成员保存,并使用看似不可公开访问的样式属性进行检索:
private int mPreferenceHeaderItemResId = 0;
...
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
...
TypedArray sa = obtainStyledAttributes(null,
com.android.internal.R.styleable.PreferenceActivity,
com.android.internal.R.attr.preferenceActivityStyle,
0);
...
mPreferenceHeaderItemResId = sa.getResourceId(
com.android.internal.R.styleable.PreferenceActivity_headerLayout,
com.android.internal.R.layout.preference_header_item);
...
}
Run Code Online (Sandbox Code Playgroud)
然后将此资源传递给专用适配器以填充标头ListView.
有没有办法传递不同的布局资源?
android preferenceactivity android-layout preference-headers
我正在构建一个具有一些功能的应用程序:ContentProvider,SyncAdapter,作业服务和相关的持久性逻辑.除此之外,还有UI的活动.我试图将所有所述功能放在一个单独的库模块中,因为从理论上讲它们的逻辑是独立的,可以被任何应用程序重用.
现在来了Dagger2.我的库的依赖图的第一个节点(主要组件)确实需要提供Context,并且必须从Application注入此Context,因为库范围与应用程序具有相同的生命周期.显然,要自包含,我的库不应该直接使用我的Application类.
这些是我想到的可能性:
这样做的正确方法是什么?
我正在玩反思,我出现了这个问题.通过::class
语法使用绑定类引用时,我得到一个协变的KClass类型:
fun <T> foo(entry: T) {
with(entry::class) {
this // is instance of KClass<out T>
}
}
Run Code Online (Sandbox Code Playgroud)
正如我可以从文档中学习的那样,这将返回对象的确切类型,以防它是子类型的实例T
,因此是方差修饰符.但是这会阻止检索在T
类中声明的属性并获取它们的值(这是我正在尝试做的)
fun <T> foo(entry: T) {
with(entry::class) {
for (prop in memberProperties) {
val v = prop.get(entry) //compile error: I can't consume T
}
}
}
Run Code Online (Sandbox Code Playgroud)
我发现一个解决方案是javaClass.kotlin
在对象引用上使用扩展函数,而不是使用不变类型:
fun <T> foo(entry: T) {
with(entry.javaClass.kotlin) {
this // is instance of KClass<T>
}
}
Run Code Online (Sandbox Code Playgroud)
这样,我在运行时获得了确切的类型,并且可以使用该类型.
有趣的是,如果我使用超类型而不是泛型,使用后一种方法我仍然可以访问正确的类型,而不需要方差:
class Derived: Base()
fun foo(entry: Base) {
with(entry.javaClass.kotlin) {
println(this == …
Run Code Online (Sandbox Code Playgroud) 其他人已经指出了这个问题(例如here)。尽管我可能已经理解了原因,但是在使用更高级别的http
库时仍然找不到解决方案。例如:
import 'package:http/http.dart';
// yes, pwd is String, it's just a test...
Future<Response> login(String user, String pwd) {
final authHeader = encodeBasicCredentials(user, pwd);
return get(
'http://192.168.0.100:8080/login',
headers: <String, String>{
HttpHeaders.AUTHORIZATION: authHeader,
},
));
}
Run Code Online (Sandbox Code Playgroud)
SocketException
例如,如果无法访问主机(在我的情况下,错误的主机ip),我将找不到捕获被抛出的邮件的方法。我尝试将await
in 包装try/catch
或使用Future.catchError
。
这是异常的堆栈跟踪:
[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 4036): SocketException: OS Error: Connection refused, errno = 111, address = 192.168.0.100, port = 35588
E/flutter ( 4036): #0 IOClient.send (package:http/src/io_client.dart:30:23)
E/flutter ( 4036): <asynchronous suspension>
E/flutter …
Run Code Online (Sandbox Code Playgroud)