标签: android-support-design

以编程方式设置浮动操作按钮的行为

我正在使用以下指南来实现滚动感知FAB:

https://guides.codepath.com/android/Floating-Action-Buttons#overview

创建类之后,通过在XML中声明它来设置行为,如下所示:

<android.support.design.widget.FloatingActionButton    
app:layout_behavior="com.codepath.floatingactionbuttontest.ScrollAwareFABBehavior" />
Run Code Online (Sandbox Code Playgroud)

由于我的代码是如何编写的,我想以编程方式而不是XML中设置行为.我有一种感觉,这是通过CoordinatorLayout完成的,但我画了一个空白.

任何帮助,将不胜感激!

提前致谢.

android android-support-library floating-action-button android-design-library android-support-design

5
推荐指数
1
解决办法
8402
查看次数

FitsSystemWindows 不工作

我想设置FitsSystemWindows = true我的工具栏或/和更改通知栏颜色。但这不起作用。我想做的事:图片

我的代码在这里: 样式

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:textColorPrimary">@color/colorWhite</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)

ActivityDrawerLayout - 其他活动的基础活动

<android.support.v4.widget.DrawerLayout ...
    android:fitsSystemWindows="true"
    tools:context="com.peter.freshNews.activity.DrawerActivity">

    <android.support.design.widget.NavigationView ...
        android:background="@color/drawer_background"
        android:fitsSystemWindows="true"
        app:menu="@menu/drawer_menu" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

活动主体

<FrameLayout ...
android:fitsSystemWindows="true">

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinatorLayout"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager.../>

    <include layout="@layout/toolbar" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

工具栏

<android.support.design.widget.AppBarLayout 
   android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:background="@android:color/transparent">

    <android.support.design.widget.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:collapsedViewOffset="0dp"
        app:contentScrim="?attr/colorPrimary"
        app:expandedViewOffset="0dp"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ViewSwitcher …
Run Code Online (Sandbox Code Playgroud)

java android android-support-library android-support-design

5
推荐指数
1
解决办法
6706
查看次数

禁用BottomSheet拖动

由于我的声誉点很低,我无法发表评论。所以我要扩展这个问题: 禁用用户在BottomSheet上拖动

Ray W 提供的解决方案有效,但现在它通过在父视图(CoordinatorLayout)上滑动和拖动来扩展。

图片

在该图像中,如果我拖动“不需要的拖动区域”,BottomSheet 会向上滑动。如何过滤或停止不需要的视图上的触摸事件?

android android-support-library android-support-design bottom-sheet

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

似乎是支持设计库中的一个错误

我正在尝试创建一个与Google Photosapp UI 类似的应用程序.支持Libary版本= 25.1.0.

半透明状态和导航栏的问题,内部的小部件CoorinatorLayout看起来并不像预期的那样.设置fitsSystemWindows=true属性BottomNavigationView使其太大(屏幕截图1),并且SnakBar在这种情况下出现在导航栏后面,而不是在BottomNavView预期的上方或导航栏.如果我添加fitsSystemWindows=trueToolbar(截图2),然后BottomNavigationView失去它的fitsSystemWindows属性和Toolbar内容的地方去了.它看起来像一个支持库错误,但我不确定.

这是我的DSL代码:

       coordinatorLayout {

                customToolbar {
                    id = TOOLBAR
//                  fitsSystemWindows = true
                    title = createTitle(ctx)
                    lparams(matchParent, dip(48))
                }

                frameLayout {
                    id = CONTENT_FRAME
                    backgroundResource = R.color.colorBackground
                    lparams(matchParent, matchParent)
                }

                bottomNavigationView(R.style.Base_ThemeOverlay_AppCompat_Dark) {
                    id = BOTTOM_NAVIGATION_VIEW

                    fitsSystemWindows = true
                    itemIconTintList = ContextCompat.getColorStateList(ctx, R.drawable.nav_item_color_state)
                    itemTextColor = ContextCompat.getColorStateList(ctx, R.drawable.nav_item_color_state)
                    backgroundResource = R.color.colorAccent
                    inflateMenu(R.menu.menu_drawer_2)
                    lparams(matchParent) {
                        anchorGravity = Gravity.BOTTOM …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-support-library anko android-support-design

5
推荐指数
0
解决办法
482
查看次数

TextInputLayout.passwordVisibilityToggleRequested上的NullPointerException

我在Firebase崩溃报告Password toggle button中遇到了一些关于某些真实设备中处于发布模式的应用的错误.问题是堆栈跟踪错误完全与android.support.design代码类似,您将在以下从firebase控制台获取的日志中看到:

异常java.lang.NullPointerException:尝试在空对象引用上调用虚方法'int java.util.ArrayList.size()'
android.graphics.drawable.AnimatedVectorDrawable.isStarted(AnimatedVectorDrawable.java:427)
android.graphics.drawable .AnimatedVectorDrawable.start(AnimatedVectorDrawable.java:440)
android.graphics.drawable.AnimatedStateListDrawable $ AnimatedVectorDrawableTransition.start(AnimatedStateListDrawable.java:339)
android.graphics.drawable.AnimatedStateListDrawable.selectTransition(AnimatedStateListDrawable.java:226)
android.graphics.drawable .AnimatedStateListDrawable.onStateChange(AnimatedStateListDrawable.java:145)
android.graphics.drawable.Drawable.setState(Drawable.java:599)
android.support.v4.graphics.drawable.DrawableWrapperGingerbread.setState(DrawableWrapperGingerbread.java:145)
android.support .v4.graphics.drawable.DrawableWrapperLollipop.setState(DrawableWrapperLollipop.java:95)
android.widget.ImageView.drawableStateChanged(ImageView.java:1115)
android.support.v7.widget.AppCompatImageButton.drawableStateChanged(AppCompatImageButton.java:149)
android.view.View.refreshDrawableState(View.java:16052)
android.support.design.widget.CheckableImageButton.setChecked(CheckableImageButton.java:75 )
android.support.design.widget.TextInputLayout.passwordVisibilityToggleRequested(TextInputLayout.java:1293)
android.support.design.widget.TextInputLayout $ 4.onClick(TextInputLayout.java:1074)
android.view.View.performClick(View.java:4785 )
android.view.View $ PerformClick.run(View.java:19888)
android.os.Handler.handleCallback(Handler.java:739)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper .loop(Looper.java:135)
android.app.ActivityThread.main(ActivityThread.java:5276)
java.lang.reflect.Method.invoke(Method.java)java.lang.reflect.Method.invoke(Method.java) :372)
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:911)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

之前我一直在跟踪与此小部件相关的一些错误,我的意思是,我发布了与密码切换可见性相关的问题,我发现了一些关于此组件的问题:

我还发现了一些关于它的AOSP问题:

现在,当用户只需按下切换按钮时,我就会收到此错误

它发生在以下真实设备中:
firebase崩溃报告的设备
关于TextInputLayout和TextInputEditText的XML及其主题:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/TextLabel"
        app:passwordToggleEnabled="true">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/login_field_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/perfil_field_password"
            android:inputType="textPassword"
            android:maxLines="1"
            android:maxLength="100"
            android:imeOptions="actionDone"
            android:textColor="@color/colorAccent"
            android:textSize="18sp"
            android:paddingStart="15dp"
            android:paddingEnd="5dp"/> …
Run Code Online (Sandbox Code Playgroud)

android android-support-library android-support-design android-textinputlayout android-textinputedittext

5
推荐指数
0
解决办法
723
查看次数

展开时如何使底部工作表将工具栏推出并在折叠时将其拉回?

我希望在底部工作表展开时将工具栏向上推出视图,并在折叠时将其拉回。我看到的所有示例都是合并到工具栏或捕捉到工具栏顶部的其他视图,但它们都没有隐藏工具栏。如何做到这一点?

    <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    >


  <FrameLayout
      android:id="@+id/mainContentContainer"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/red"
      />


  <android.support.design.widget.AppBarLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:fitsSystemWindows="true"
      >

    <FrameLayout
        android:id="@+id/topContentContainer"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/blue"
        app:layout_scrollFlags="scroll|enterAlways|snap"
        />

  </android.support.design.widget.AppBarLayout>

  <FrameLayout
      android:id="@+id/categoriesSelectionContainer"
      android:layout_width="match_parent"
      android:layout_height="200dp"
      android:background="@color/green"
      app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
      >

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="android.support.design.widget.AppBarLayout.ScrollingViewBehavior"
        >

      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-design-library android-support-design

5
推荐指数
2
解决办法
3195
查看次数

如何在BroadcastReceiver中添加Snackbars?

Snackbars通过在屏幕底部显示简短消息来提供有关操作的轻量级反馈.Snackbars可以包含一个动作.

Android还提供了一个toast,主要用于系统消息传递.Toasts与snackbars类似,但不包含动作,不能在屏幕上滑动.

我的问题

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class TestReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, final Intent intent) {
        Toast.makeText(context, "status", Toast.LENGTH_LONG).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

难道是更多钞票来显示SnackbarBroadcastReceiver一样Toast

android broadcastreceiver android-support-library snackbar android-support-design

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

更改工具栏后退箭头颜色

在此输入图像描述

你好.在上图中,您可以看到后退箭头和(部分)标题.我使用附加的.xml代码更改了标题颜色.但是我想把后箭头变成白色.

我在网上看了一些答案,但对于这么简单的问题,它们看起来太复杂了.

这有什么简单的原因吗?

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="fill_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:titleTextColor="@android:color/white"/>
Run Code Online (Sandbox Code Playgroud)

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
//...

public class LoginActivity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
      //...
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

android android-appcompat material-design android-toolbar android-support-design

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

Android KitKat:android.view.InflateException:错误膨胀类android.support.design.widget.NavigationView

以下是我的配置.这适用于Android Lollipop但在Android Kitkat上崩溃.

我尝试了每个解决方法,但无法帮助:
错误膨胀类android.support.design.widget.NavigationView

的build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 23

    // Support RenderScript Library v8
    renderscriptTargetApi 18
    renderscriptSupportModeEnabled true
}
}

ext{
    supportLibVersion = '23.1.1'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile "com.android.support:appcompat-v7:${supportLibVersion}"
    compile "com.android.support:design:${supportLibVersion}"
    compile "com.android.support:cardview-v7:${supportLibVersion}"
    compile "com.android.support:recyclerview-v7:${supportLibVersion}"
}
Run Code Online (Sandbox Code Playgroud)

主题 style.xml

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar" parent="AppTheme">
        <item name="windowActionBar">false</item> …
Run Code Online (Sandbox Code Playgroud)

android android-support-library navigation-drawer navigationview android-support-design

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

Android:setBackgroundTintList适用于支持fab,setSupportBackgroundTintList导致npe

我有一个支持工厂定义如下:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/somefab"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        app:elevation="6dp"
        app:rippleColor="@android:color/white"
        />
Run Code Online (Sandbox Code Playgroud)

如果我像这样以编程方式设置backgroundtintlist,那么它可以工作:

somefab.setBackgroundTintList(ColorStateList.valueOf(Color.GRAY));
Run Code Online (Sandbox Code Playgroud)

但是,这是一个支持工厂,应该在较低的apis上可见,所以我想使用支持方法:

somefab.setSupportBackgroundTintList(ColorStateList.valueOf(Color.GRAY));
Run Code Online (Sandbox Code Playgroud)

在这里我已经得到一个空指针异常.

    java.lang.RuntimeException: Unable to start activity ComponentInfo{myprojectpath}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)
  at android.app.ActivityThread.-wrap15(ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
  at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1723)
  at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1792)
  at android.graphics.drawable.RippleDrawable$RippleState.<init>(RippleDrawable.java:998)
  at android.graphics.drawable.RippleDrawable.createConstantState(RippleDrawable.java:989) …
Run Code Online (Sandbox Code Playgroud)

android android-support-library floating-action-button android-support-design

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