小编azi*_*ian的帖子

如何禁用BottomSheetDialogFragment拖动

如何禁用BottomSheetDialogFragment手指拖动?

我看到了类似的问题,但他们BottomSheet都不是BottomSheetDialogFragment.

android android-layout android-view android-dialog bottom-sheet

13
推荐指数
7
解决办法
8418
查看次数

Recyclerview:收听填充点击事件

我有一个横向RecyclerViewleftPadding = 48dp,topPadding = 24dpclipToPadding = false.它从左侧的空白区域开始,但是当用户滚动列表时,其项目将在该(先前为空)空间上绘制.顶部空间始终为空.

在此输入图像描述

RecyclerView是在FrameLayout中foreground = selectableItemBackground.

我的问题来自这样一个事实,即RecyclerView消耗和忽略左侧和顶部空间的触摸,这意味着OnClickListener当连接到FrameLayout或者连接时都不会触发RecyclerView.

我已经与尝试clickable = false,并focusable = falseRecyclerView,这是行不通的.

我在找什么:

  1. 滚动 RecyclerView 在此输入图像描述
  2. 可点击的RecyclerView项目 在此输入图像描述
  3. FrameLayout单击RecyclerView's空白时单击事件
  4. (3的替代)可点击的RecyclerView's空格 在此输入图像描述 在此输入图像描述

编辑:我已经创建了一个简单的项目,显示我正在谈论的问题:https://github.com/dadino/recyclerviewemptyspacestest 有2个提交,在第一个我试图抓住父视图的点击,在第二个我试图抓住RecyclerView本身的点击.它们都不起作用.

android android-custom-view kotlin android-recyclerview android-touch-event

13
推荐指数
1
解决办法
585
查看次数

具有相同高度的两个视图并排

我有两个相同高度的视图.我想要的行为是,他们不会在彼此之间投下阴影,因为他们有相同的高度,然而,正在发生的是左边的视图,在右边投下阴影.它们的大小不同,因此我无法将它们放在另一个视图中并对该视图应用高程.

这是预期的行为吗?有没有办法围绕它?

编辑:

我只是用简单的视图重新创建,这里是代码.我也注意到它有预期的行为,如果我直接在布局中有视图,并且不包括它,因为我在这个例子中做了它,因为我需要它工作.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="@android:color/holo_green_dark">

    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@android:color/holo_red_dark"
        android:elevation="24dp"/>

    <include layout="@layout/test"/>

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

以下是包括:

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

    <LinearLayout
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_red_dark"
        android:elevation="24dp"/>

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

截图:

android android-layout android-view android-elevation

12
推荐指数
1
解决办法
921
查看次数

为什么ButterKnife为@OnClick方法使用DebouncingOnClickListener?

我正在查看生成的ButterKnife代码,并注意到对于@OnClick注释,它使用的是DebouncingOnClickListener由库实现的.

这是DebouncingOnClickListener为了避免在同一帧上使用该侦听器多次单击任何元素(实现此目的,它们使用静态标志).你可以在这里看到实现.

我试图找到一个解释,为什么他们决定在库管理的每个点击事件中使用它,但找不到任何.

那么,为什么他们使用它呢?为什么他们决定ButterKnife的每个用户都需要这个?不应该是决定使用它的用户?为什么要将视图绑定帮助它提供这个"功能"?如果我想在同一帧上多次点击,会发生什么?我无法使用ButterKnife进行点击活动.

我不假装冒犯,只想要一个解释,也许我错过了什么.

android listener android-view onclicklistener butterknife

12
推荐指数
1
解决办法
2176
查看次数

在多个模拟器上连接了Android测试

背景

我想在不同的模拟器上对Jenkins运行我的Android Instrumented测试.假设我有100个测试和4个模拟器,我想在每个上运行25个测试.

./gradlew connectedDebugAndroidTest在Jenkins Pipeline中为4个模拟器执行并行操作

stage('Instrumented Tests') {
    parallel(
            emu1: {
                 runInstrumentedTestOnEmu(...)
            },
            emu2: {
                 runInstrumentedTestOnEmu(...)
            }
            ...
    )
}
Run Code Online (Sandbox Code Playgroud)

connectedDebugAndroidTest 将生成其他命令以设置运行检测测试的环境.

...
:app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest
:app:processDebugAndroidTestJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebugAndroidTest
:app:validateSigningDebugAndroidTest
:app:packageDebugAndroidTest
:app:assembleDebugAndroidTest
:app:connectedDebugAndroidTest
Run Code Online (Sandbox Code Playgroud)

当环境准备就绪时,:app:connectedDebugAndroidTest它会在仿真器上开始运行测试.

我不想为所有并行调用运行这些过程(在这种情况下,它将是其中的4个),因为显然我多次完成相同的工作.从理论上讲,最好的选择是parallel在所有内容准备好运行测试之前和之后执行设置,然后进入parallel步骤并在每个模拟器上开始测试.

是否可以在不执行任何操作的情况下执行所有预设置步骤connectedDebugAndroidTest

此外,如果我connectedDebugAndroidTest在4个仿真器上并行运行,则构建崩溃,因为intermediate当其他并行构建已删除该文件时,gradle会尝试从目录中读取文件,从而导致崩溃.

您可以使用上面提到的设置在github中查看此测试项目.

android jenkins android-instrumentation

12
推荐指数
1
解决办法
809
查看次数

从Android Application类刷新Dagger 2实例

我在我的模块类中有一组@Singleton@Provides方法,用于在整个应用程序中创建Singleton实例.一切都很好,除了几个瓶颈情况,如下所示:

步骤1.我正在OKHttpClient使用Auth令牌创建一个Retrofit实例,以便每次都进行经过身份验证的api调用(通过处理Auth令牌检索和插入SharedPreferences).但是,在我通过清除数据库和共享首选项值注销应用程序之后重新启动活动时,问题就开始了.

步骤2.注销后,我正在另一个请求获取auth令牌并SharedPreferences再次插入以供将来使用.

第3步:现在,如果我继续进行其余的api调用,则前面的Dagger @Singleton@Provides方法实例保持相同,除非直到我通过从最近的任务中清除它来重新启动应用程序.(新的身份验证令牌未更新)

需要修复:

  1. 如何触发Dagger提供程序方法强制再次触发或撤消它?

  2. 是否有任何方法可以像应用程序重新启动时那样刷新应用程序类数据.

请找到我项目中使用的Dagger 2架构:

NetworkModule.java(Dagger Module类)

@Module
public class NetworkModule {

  private Context context;


    public NetworkModule(Application app) {
        this.context = app;
    }


    @Provides
    @Named("network.context")
    Context providesContext() {
        return context;
    }

 @Singleton
    @Provides
    OkHttpClient providesOkHttpClient(@Named("network.context")final Context context) {


        final UserProfile userProfile = GsonUtils.createPojo(SharedPrefsUtils.getString(Constants.SHARED_PREFS.USERS_PROFILE, "",context), UserProfile.class);


        Logger.i(userProfile != null && !TextUtils.isEmpty(userProfile.getAuth_token()) ? userProfile.getAuth_token() : "----OAuth token empty---");

        OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); …
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger dagger-2

12
推荐指数
3
解决办法
6333
查看次数

使用selectableItemBackground作为背景形状drawable

我有几个按钮,我需要一个椭圆形的边框.

所以我在capsule_border.xml中有这个

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="9999dp"/>
    <stroke
        android:width="1px"
        android:color="@color/border_gray" />
</shape>
Run Code Online (Sandbox Code Playgroud)

我会android:background="@drawable/capsule_border.xml在需要它的地方使用它.

现在,我希望有一个按钮,以获得这个椭圆形边框,但也有一个android:background="?selectableItemBackground"视觉反馈.

我尝试使用带有selectableItembackground的父布局和带有capsule_border的按钮.但似乎突出显示的可点击区域是整个方块.而不仅仅是胶囊边界内的区域.

在此输入图像描述

有没有我可以做到这一点,以便selectableItemBackground不高度视图的整个矩形,但只在我绘制的边框内?

android android-layout android-view android-selector android-drawable

12
推荐指数
3
解决办法
3045
查看次数

以编程方式将余量设置为CardView

我有一个CardViewXML布局,我需要以编程方式设置边距(这是因为我不需要任何时间的边距.基于几个条件,我设置或删除边距).

我是这样做的:

CardView.LayoutParams layoutParams = (CardView.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

这很好.它把2dp保证金放在我的底部CardView.但是,我在logcat中得到了这个:

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)

所以我改成CardView.LayoutParamsFrameLayout.LayoutParams,像这样:

FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

然而,它仍然有效,但我得到与上面相同的错误.

所以我再修改一次使用它LinearLayout.LayoutParams.

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我没有得到错误,但它没有设置任何余量.

我应该忽略错误吗?这似乎不对.

编辑:

这是我CardView的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:background="@android:color/white"
    android:minHeight="@dimen/item_min_height"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.CardView
        android:id="@+id/cardViewAppointmentWeek"
        app:cardElevation="2dp"
        android:layout_marginBottom="2dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"> …
Run Code Online (Sandbox Code Playgroud)

android android-layout layoutparams android-cardview android-layoutparams

12
推荐指数
2
解决办法
9028
查看次数

使ImageView具有深色透明度

我想在图像顶部添加透明的黑色,使其更暗.

在此输入图像描述

          <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <ImageView
                    android:id="@+id/rest_image"
                    android:layout_width="match_parent"
                    android:layout_height="150dp"
                    android:adjustViewBounds="true"
                    android:scaleType="centerCrop"
                    />
            </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我可以设置alpha参数,但颜色变化为白色.我想制作像这样的较暗的图像.我怎么能用xml或Java代码做到这一点.我会根据条件设置它.

谢谢.

android image android-layout android-imageview android-view

12
推荐指数
3
解决办法
7294
查看次数

将ConstraintLayout中的FrameLayout对齐到底部

我希望屏幕底部的回收视图上方有一个布局(如框架),这样即使该布局可见,我仍然可以在其后面滚动回收视图.所以我想在屏幕底部对齐框架布局并制作它根据要求可见和不可见.这是我的代码.

 <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.protossoft.root.aesencryption.MainActivity">



    <ListView
        android:layout_width="match_parent"
        android:id="@+id/listView"
        android:layout_height="match_parent">

    </ListView>

  <!--  <RelativeLayout
        android:layout_width="match_parent"

        android:layout_height="wrap_content">-->
    <FrameLayout
        android:layout_width="match_parent"

        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="443dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/deviceNumberImage"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.2"
                android:src="@android:drawable/btn_default" />

            <TextView
                android:id="@+id/deviceNumber"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.8"
                android:text="990000862471854" />

        </LinearLayout>
    </FrameLayout>
   <!-- </RelativeLayout>-->
Run Code Online (Sandbox Code Playgroud)

我对约束布局没有太多的想法,但是当我从编辑器底部移动视图时,它正在使用像

tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="443dp"
Run Code Online (Sandbox Code Playgroud)

我想用align_parentBottom这样的属性实现相同的功能.但是没有一个属性可供使用.我需要做什么才能使框架布局同时在回收器视图的底部和顶部可见?谢谢 :)

xml android android-layout android-view android-constraintlayout

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