小编azi*_*ian的帖子

Android Databinding xml重复属性

我最近开始开发一个使用数据绑定的android应用程序.我现在的问题是因为这个错误我无法运行应用程序:

Error:(10) Error parsing XML: duplicate attribute
Run Code Online (Sandbox Code Playgroud)

使用数据绑定(我正在使用片段)在每个文件中发生错误.我用Google搜索了3个小时,我找不到解决方案.

的build.gradle:

apply plugin: 'com.android.application'

android {
    dexOptions {
        preDexLibraries = false
        javaMaxHeapSize "2g"
    }
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "at.blacktasty.schooltoolmobile"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile files('libs/eneter-messaging-android-7.0.1.jar')
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0' …
Run Code Online (Sandbox Code Playgroud)

xml data-binding android android-layout android-databinding

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

更改CardView阴影颜色

这个问题在很多时候被问过,但我仍然找不到解决这个问题的好方法.

为什么我需要这样做?好吧,因为项目我和我的团队开发有iOS风格.

我尝试了什么?

  1. 9.pathch阴影生成器,但9.pathes本质上是pngs,它给了我没有灵活性,如果我将使用这种方法,我应该编辑边缘到处.
  2. 它支持自定义阴影的碳库,它们被绘制到视图边框之外,但是当库不为圆角绘制阴影时,存在关于圆角矩形的问题.
  3. 使用旧的CardView实现并覆盖其阴影颜色,但它被绘制在卡片边界内,因此它不是选项.

那么有没有办法改变CardView的阴影颜色,只需对所有布局文件进行最少的编辑,并在视图外部绘制阴影,就像原始的CardView一样?

android shadow android-view android-cardview android-elevation

22
推荐指数
4
解决办法
2万
查看次数

从 DecorView@2da7146[MyActivity] 中找不到 ViewTreeLifecycleOwner

从撰写更新alpha-11alpha-12(或beta-01)后,每当我打开具有撰写视图的活动或片段时,我都会遇到此崩溃。

我正在使用AppCompatActivitywhich implements LifecycleOwner,所以这非常奇怪。

    java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from DecorView@2da7146[MyActivity]
            at androidx.compose.ui.platform.WindowRecomposer_androidKt.createLifecycleAwareViewTreeRecomposer(WindowRecomposer.android.kt:214)
            at androidx.compose.ui.platform.WindowRecomposer_androidKt.access$createLifecycleAwareViewTreeRecomposer(WindowRecomposer.android.kt:1)
            at androidx.compose.ui.platform.WindowRecomposerFactory$Companion$LifecycleAware$1.createRecomposer(WindowRecomposer.android.kt:98)
            at androidx.compose.ui.platform.WindowRecomposerPolicy.createAndInstallWindowRecomposer$ui_release(WindowRecomposer.android.kt:151)
            at androidx.compose.ui.platform.WindowRecomposer_androidKt.getWindowRecomposer(WindowRecomposer.android.kt:199)
            at androidx.compose.ui.platform.AbstractComposeView.ensureCompositionCreated(ComposeView.android.kt:176)
            at androidx.compose.ui.platform.AbstractComposeView.onAttachedToWindow(ComposeView.android.kt:207)
            at android.view.View.dispatchAttachedToWindow(View.java:20014)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3589)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2223)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8511)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
            at android.view.Choreographer.doCallbacks(Choreographer.java:761)
            at android.view.Choreographer.doFrame(Choreographer.java:696)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
            at android.os.Handler.handleCallback(Handler.java:873)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7050)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
Run Code Online (Sandbox Code Playgroud)

我的代码看起来很简单:

    class MyActivity : …
Run Code Online (Sandbox Code Playgroud)

android android-view android-activity kotlin android-jetpack-compose

22
推荐指数
3
解决办法
2080
查看次数

改造:如果响应代码为401,则重定向到LoginActivity

如何LoginActivity从拦截器(非活动类)开始?我已经尝试过Interceptor下面的代码()但不适合我.

拦截器

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {

                Request newRequest = chain.request().newBuilder()
                        .addHeader("Authorization", "Bearer " + auth_token_string)
                        .build();

                Response response =  chain.proceed(newRequest);
                Log.d("MyApp", "Code : "+response.code());
                if (response.code() == 401){
                    Intent intent = new Intent(SplashActivity.getContextOfApplication(), LoginActivity.class);
                    startActivity(intent);
                    finish();  //Not working
                    return response;
                }

                return chain.proceed(newRequest);
            }
        }).build();
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的当前解决方案,有没有比这更好的解决方案?该解决方案必须在每次api呼叫时保持重复.

主要活动

call.enqueue(new Callback<Token>() {
            @Override
            public void onResponse(Call<Token> call, Response<Token> response) {
                if(response.isSuccessful())
                {
                    //success
                }
                else
                {
                    Intent …
Run Code Online (Sandbox Code Playgroud)

java android retrofit okhttp retrofit2

21
推荐指数
3
解决办法
3150
查看次数

如何正确删除Android中按钮周围的填充(或边距?)?

目前,我有以下底部登录按钮.

没有按下按钮时

在此输入图像描述

按下按钮时

在此输入图像描述

XML看起来像这样

<LinearLayout
    android:background="?attr/welcomeBottomNavBarBackground"
    android:orientation="horizontal"
    android:id="@+id/sign_in_bottom_nav_bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">
    <Button
        style="?android:attr/buttonBarButtonStyle"
        android:id="@+id/sign_in_button"
        android:layout_width="0dp"
        android:width="0dp"
        android:layout_weight="1.0"
        android:layout_height="48dp"
        android:gravity="center"
        android:layout_gravity="center"
        android:enabled="true"
        android:textAllCaps="true"
        android:text="@string/log_in" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想在按下按钮时删除按钮周围的填充(或者我应该将其称为边距?请参阅我最底部的p/s部分).

我看看如何删除Android中的按钮周围的填充?

我试过了

<Button
    ...
    ...
    android:minHeight="0dp"
    android:minWidth="0dp" />
Run Code Online (Sandbox Code Playgroud)

它不起作用也没有效果.


我进一步尝试

<Button
    ...
    ...
    android:background="@null"
    android:minHeight="0dp"
    android:minWidth="0dp" />
Run Code Online (Sandbox Code Playgroud)

按下时不再填充.然而,设计压制视觉效果的材料也将消失.

我可以知道在压制过程中删除按钮填充的最佳方法是什么,但保留材料设计按下的视觉效果?

P/S

我真的不知道是否应该称之为填充或边距.我希望实现的是,当我们按下底部区域时,按下视觉效果变化应覆盖整个100%底部区域(@+id/sign_in_bottom_nav_bar),而不是当前95%的底部区域.

java android android-layout android-button android-view

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

使用KClass类型绑定到映射

我试图ViewModel通过它们的KClass类型将子类绑定到地图中:

@Module abstract class ViewModelModule {

    @Binds @IntoMap @ViewModelKey(MyViewModel::class)
    abstract fun bindsMyViewModel(viewModel: MyViewModel): ViewModel

    @Binds abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory

}
Run Code Online (Sandbox Code Playgroud)

但我得到Dagger编译错误:

e: ~/Example/app/build/tmp/kapt3/stubs/debug/com/example/app/injection/AppComponent.java:5: error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<kotlin.reflect.KClass<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
e: 

e: public abstract interface AppComponent {
e:                 ^
e:       java.util.Map<kotlin.reflect.KClass<? extends android.arch.lifecycle.ViewModel>,? extends javax.inject.Provider<android.arch.lifecycle.ViewModel>> is injected at
e:           com.example.app.ui.ViewModelFactory.<init>(creators)
e:       com.example.app.ui.ViewModelFactory is injected at
e:           com.example.app.injection.ViewModelModule.bindViewModelFactory(p0)
e:       android.arch.lifecycle.ViewModelProvider.Factory is injected at
e:           com.example.app.ui.MyFragment.setViewModelFactory(p0)
e:       com.example.app.ui.MyFragment is injected …
Run Code Online (Sandbox Code Playgroud)

android dependency-injection kotlin dagger dagger-2

20
推荐指数
1
解决办法
2042
查看次数

如何在自定义视图或其他Android类中使用AndroidInjection类?

我对Android特定模式的问题是,如果你使用他们的AndroidInjection类,除了使用Application Component之外,除了Activities/ Fragments/自定义视图/适配器之外,成员无法注入其他对象.这是因为你无法获得用于注入/ 的Subcomponent(AndroidInjector)的引用.这使得注入Dialogs(如果你使用).ActivitiesFragmentsDialogFragments

AndroidInjection级似乎只支持Android核心类型.

android dependency-injection dagger dagger-2

20
推荐指数
3
解决办法
3430
查看次数

Gradle:查找使用+导入的依赖项的已解析版本

我想dependency在gradle中打印最后一个版本.

我以这种方式添加了我的依赖:

compile 'test:test:+'
Run Code Online (Sandbox Code Playgroud)

现在我想打印我的依赖版本,因为我想知道我正在使用哪个版本.

我正在以这种方式使用它:

gradle dependencyInsight --configuration compile --dependency test:test
Run Code Online (Sandbox Code Playgroud)

但我的输出是这样的:

+--- test:test:+ -> project : (*)
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以得到我的依赖的真实版本,而不是+

java android build-tools gradle android-gradle-plugin

20
推荐指数
3
解决办法
3551
查看次数

为 Jetpack Compose 视图的 Play Console“预启动报告”提供登录凭据

我可以看到“Play Console”期望为“用户名/密码资源 ID”字段传递“旧” ID: android.view.View

我无法弄清楚如何为 Jetpack Compose 视图层次结构提供资源 ID。我怀疑它应该以某种方式与 相连Semantics,但我不确定 Play Console 是否支持 Jetpack Compose 视图。

好奇是否有人能够设置这个。

android prelaunch google-play-console android-jetpack android-jetpack-compose

20
推荐指数
0
解决办法
458
查看次数

如何使RecyclerView停止回收定义的位置?

我的问题是:我在RecyclerView内的其中一个视图上发生了视频流.

当用户滚动时,视图将被回收,其他摄像头会在该回收的视图持有者上开始自己的流式传输.这对用户界面不利,因为流式处理需要几秒钟才能启动.

我怎么能对RecyclerView说:"嘿嘿回收器,请不要回收那个确切的位置x并给出那个位置总是与你第一次给出的相同的观察者,而不是随机的一个"?

请有人帮帮我=(

android recycle android-layout android-viewholder android-recyclerview

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