小编yww*_*ynm的帖子

使用?attr/selectableItemBackground作为背景时,如何修改波纹颜色?

我已经看到了一些SO问题,他们提供了一些可能的方法来实现我想要的.例如:

  1. colorControlHighlight在styles.xml中使用属性.

    这是我的styles-v21.xml:

    <style name="SelectableItemBackground">
        <item name="android:colorControlHighlight">#5677FC</item>
        <item name="android:background">?attr/selectableItemBackground</item>
    </style>
    
    Run Code Online (Sandbox Code Playgroud)

    我的小部件:

    <TextView
        android:id="@+id/tv_take_photo_as_bt"
        android:layout_width="280dp"
        android:layout_height="48dp"
        android:text="@string/act_take_photo"
        style="@style/SelectableItemBackground"/>
    
    Run Code Online (Sandbox Code Playgroud)

    它不起作用.我还尝试添加parent="Theme.AppCompat到"SelectableItemBackground"样式,或者更改为colorControlHighlight(no android: prefix)"或更改为?android:attr/selectableItemBackground,既没有用.

  2. backgroundTint在布局中使用属性.

    所以我加入android:backgroundTint="#5677FC"我的TextView.还是没用.然后我试着改变android:backgroundTintMode,src_in并且src_atop,他们永远不会有所作为.

那么,当我?attr/selectableItemBackground用作背景时,如何改变波纹颜色.我只关注棒棒糖及以上.先感谢您!

android android-appcompat android-layout material-design android-5.0-lollipop

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

Android - 新日历样式DatePicker和TimePicker

是否可以使用最新版本的android中使用的新DatePickerDialogTimePickerDialog样式?他们可以在这里看到:新款日期和时间选择器

我试着寻找AOSP项目的最新资源,但是使用该代码的事件,我仍然得到旧的(使用微调) - 他们使用相同的DatePickerDialogTimePickerDialog类,所以我没有想到任何其他东西.

谢谢你的帮助.

android calendar datepicker timepicker

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

ScrollView内部的RecyclerView,某些项目未显示

我在ScrollView中有一个RecyclerView,如下所示:

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

    <!--other stuff-->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"/>

    </LinearLayout>

    <!--other stuff-->

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

这个RecyclerView项目是一个RelativeLayout,其中有一个EditText和其他的观点.在layout_heightRelativeLayoutEditText既是wrap_content.用户可以在EditText没有任何长度/线条限制的情况下输入,以便每个项目的高度不同.

然后我发现getItemCount()Adapter返回true值但onBindViewHolder()被调用错误的时间(少于它应该),因此不足以显示所有项目.

我发现这只会在我写的时候发生recyclerView.setNestedScrollingEnabled(false).但我不能删除这一行.因为如果我这样做了,RecyclerView它就不会顺畅地滚动,并且与其他内部ScrollViewScrollView自身的观点不一致.

这发生在6.0但不是4.1.

我在此页面与Google进行了沟通:https://code.google.com/p/android/issues/detail?id = 213914他告诉我这是一个错误修复程序RecyclerView.您可以访问该页面,以便更好地理解问题和我的目标(有一个小样本项目可以显示问题).即使是现在我也不同意他,我想解决这个问题.请帮忙,提前谢谢.

android android-scrollview android-support-library android-recyclerview android-6.0-marshmallow

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

RecyclerView,StaggeredGridLayoutManager刷新Bug

我使用了支持库v7-21,但RecyclerView显示不正确. GridLayoutManager并且LinearLayoutManager是好的.只有在StaggeredGridLayoutManagerI加载我DataSet然后刷新数据时才会出现问题.数据刷新工作正常,但RecyclerView视图存在于屏幕外.

有谁知道如何解决它?

android staggered-gridview android-recyclerview

14
推荐指数
2
解决办法
7404
查看次数

如何仅使用电子邮件应用程序发送附件电子邮件?

有两个要求:

  • 电子邮件附件
  • Intent选择器中,应该只有电子邮件应用程序.

我所知道/做过的事:

  • Intent.ACTION_SENDTOintent.setData(Uri.parse("mailto:"))可以确保有只在电子邮件应用程序Intent选择器,但它不会带来附件(如Gmail它将一些应用程序,但也有将忽略附着许多应用程序).

  • Intent.ACTION_SEND可以发送附件的电子邮件.但是,在Intent选择器中,会有应用程序实际上不是电子邮件应用程序但可以响应Intent.ACTION_SEND.使用intent.setType("message/rfc822")可以减少这些应用程序的数量,但不是全部.

  • 参考这个答案:https://stackoverflow.com/a/8550043/3952691并且几乎成功实现了我的目标.我的代码如下:

    private static void sendFeedbackWithAttachment(Context context, String subject) {
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:"));
    
        PackageManager packageManager = context.getPackageManager();
        List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);
        if (resolveInfos.isEmpty()) {
            Toast.makeText(context, context.getString(R.string.error_activity_not_found),
                    Toast.LENGTH_SHORT).show();
        } else {
            // ACTION_SEND may be replied by some apps that are not email apps. However,
            // ACTION_SENDTO doesn't allow us to choose attachment. As …
    Run Code Online (Sandbox Code Playgroud)

email android android-intent

11
推荐指数
1
解决办法
1034
查看次数

adjustResize无法在棒棒糖及以上版本中使用半透明状态/导航

有问题谈论这个问题,但我没有通过现有的答案解决我的问题.

这是我的styles-v21.xml:

<style name="MainTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:colorBackground">#EEEEEE</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我当然为相关的Activity设置了windowSoftInputMethod ="adjustResize".

这是我的layout.xml,注意根FrameLayout用于特定功能,因此需要它:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/rl_background"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!--This View is used to fill the space of status bar-->
        <View
            android:id="@+id/statusbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/statusbar_size"/>

        <!--I've set this toolbar as Actionbar-->
        <android.support.v7.widget.Toolbar
            android:id="@+id/actionbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_below="@id/statusbar"/>

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/actionbar">

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

                <!-- Two EditTexts inside -->

            </RelativeLayout>

        </ScrollView>

    </RelativeLayout>

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

当我没有触摸EditText时,一切看起来都很好:状态栏View保持原样,导航栏不覆盖内容(不要让内容不可见,但实际上内容不在其中).

在类似的问题中,人们经常教我们设置fitsSystemWindow ="true",我在layout.xml中的不同布局中做了这个,得到了不同的结果.

设置fitsSystemWindow ="true":

1.FrameLayout:AdjustResize有效,但状态栏View现在保持在真实状态栏下方.状态栏的颜色变为windowBackground.导航栏变得完全透明,因为它显示了添加此片段的其他片段内容.

2.First RelativeLayout:AdjustResize有效,但状态栏View低于实际状态栏.导航栏不太透明,无法显示其他片段,但覆盖内容.

ScrollView中的3&4.ScrollView和RelativeLayout:AdjustResize不起作用,其他条件与条件2相同.

我还使用了一种方法来编写我自己的FrameLayout,如下所示:https://stackoverflow.com/a/22266717/3952691 但正如作者所说,设置底部会导致错误.因为我使用半透明导航栏,我还需要绘制底部插图.我尝试升级版本:https …

android android-edittext android-5.0-lollipop

10
推荐指数
0
解决办法
2429
查看次数

Android上的OpenGL绘图与Unity结合,通过帧缓冲区传输纹理是行不通的

我目前正在为Unity制作Android播放器插件.基本的想法是我将MediaPlayer在Android上播放视频,它提供了一个setSurface接收SurfaceTexture构造函数参数的API ,并最终与OpenGL-ES纹理绑定.在大多数其他情况下,例如显示图像,我们可以将这个纹理以指针/ id的形式发送到Unity,调用Texture2D.CreateExternalTexture它来生成一个Texture2D对象并将其设置为UI GameObject来渲染图片.然而,当涉及到显示视频帧时,它有点不同,因为Android上的视频播放需要类型的纹理,GL_TEXTURE_EXTERNAL_OES而Unity仅支持通用类型GL_TEXTURE_2D.

为了解决这个问题,我已经google了一段时间,并且知道我应该采用一种名为"Render to texture"的技术.更明确地说,我应该产生2层的纹理,一个用于MediaPlayerSurfaceTextureAndroid中获得的团结也应该有内部的图像数据的视频帧和另一个.第一个应该是GL_TEXTURE_EXTERNAL_OES(我们简称为OES纹理)和第二个类型GL_TEXTURE_2D(让我们称之为2D纹理).这两个生成的纹理在开始时都是空的.当绑定时MediaPlayer,OES纹理将在视频播放期间更新,然后我们可以使用a FrameBuffer在2D纹理上绘制OES纹理的内容.

我写了这个过程的纯Android版本,当我最终在屏幕上绘制2D纹理时,它的效果非常好.但是,当我将其作为Unity Android插件发布并在Unity上运行相同的代码时,将不会显示任何图片.相反,它只显示预设颜色glClearColor,这意味着两件事:

  1. OES纹理 - > FrameBuffer- > 2D纹理的转移过程完成,Unity确实接收到最终的2D纹理.因为glClearColor只有在我们绘制OES纹理的内容时才会调用它FrameBuffer.
  2. 在绘图过程中发生了一些错误glClearColor,因为我们没有看到视频帧图片.事实上,我也在glReadPixels绘图之后和之前调用之前调用FrameBuffer,它将从FrameBuffer我们绑定的数据中读取数据.它返回单色的值,与我们设置的颜色相同glClearColor.

为了简化我应该在这里提供的代码,我将通过绘制三维到2D纹理FrameBuffer.如果我们能够找出哪个部分是错误的,那么我们就可以轻松地解决类似的问题来绘制视频帧.

该函数将在Unity上调用:

  public int displayTriangle() {
    Texture2D texture = new Texture2D(UnityPlayer.currentActivity);
    texture.init();

    Triangle …
Run Code Online (Sandbox Code Playgroud)

android opengl-es unity-game-engine

9
推荐指数
1
解决办法
1077
查看次数

如何将数据库中的数据显示到具有高性能的RecyclerView?

我为RecyclerView编写了自己的CursorAdapter,如下面的链接:https://gist.github.com/skyfishjy/443b7448f59be978bc59

然后我发现每当我在数据库中更改某些东西并希望在RecyclerView中显示它时,我需要通过db.query()创建一个新的Cursor并使用CursorAdpater的changeCursor().由于query()将扫描数据库中的所有行,因此即使我只将一行插入数据库,当数据量很大时,RecyclerView也会缓慢刷新.

此外,众所周知,RecyclerView为开发人员提供了notifyItemInserted/Removed(position),以便RecyclerView可以部分刷新,这对内存/时间有用且有益.但是,当我使用CursorAdapter时,我不知道何时以及如何使用这些方法,因为更改光标不会直接向使用RecyclerView的数据集绑定添加内容,而是实际刷新所有项目.

那么有没有更好的方法在RecyclerView中显示数据库中的数据并使用RecyclerView的改进方法来显示各种数据库?

sqlite android android-adapter android-cursoradapter android-recyclerview

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

使用StaggeredGridLayoutManager时如何获得RecyclerView的正确滚动距离?

我通过创建和绑定由于特殊视图类型的唯一ViewHolderin 创建了标题视图RecyclerView.标题是完全空白的,但它是全跨度的,当用户滚动时,它的高度可以很好地计算后续动画RecyclerView:

  • A TextView将从标题视图的中心移动到Toolbar最后"成为"它的标题.在此过程中,TextView将根据垂直偏移量收缩.
  • 另一个TextView将与第一个TextView同时移动,但它不会缩小.相反,当第一个TextView位于正确位置时,它将改变alpha并最终变为透明Toolbar.

为了实现它们,我需要获得滚动距离,RecyclerView以便我可以计算translateY或alpha.

这就是我现在所做的:

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        private int totalDy = 0;

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            totalDy -= dy;

            // setAlpha, setTranslationY and setScale here according to totalDy.
        }
    });
Run Code Online (Sandbox Code Playgroud)

当数据集没有改变时,它工作正常.但是,当我向下滚动时,向适配器插入/删除任何项目notifyItemInserted/Removed(),并且totalDy将不准确.例如,当我删除一个项目时,totalDy将不再返回0.

结果,使用totalDy来获得滚动距离似乎RecyclerView不会很好.开发人员有没有办法获得它?

注意:我使用的是a StaggeredGridLayoutManager,我觉得它与...不同LinearLayoutManager.

android android-support-library android-recyclerview

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

当Fragment不可见时如何防止LiveData观察者被激活

我想用LiveDatainFragment来观察一些数据的变化。现在我们假设:

  1. Fragment A都有Fragment B自己的容器布局Activity,这意味着我们将FragmentTransaction#add()单独调用它们,并且由于没有任何操作,它们的onPause()onResume()在添加(UI 更改)期间不会被调用FragmentTransaction#replace()
  2. B的容器比A的容器大,这意味着如果添加B,用户将看不到A。
  3. A中有一个LiveData名为O的观察者,它会观察一些数据的变化,并据此更新UI。关键是:我们想要为变化播放一些动画,而不是TextView#setText()天真地调用属性设置器(如)。例如,动画可能是我们调用后播放的动画RecyclerView.Adapter#notifyItemInserted()

添加B后,A就被视为对用户不可见。Fragment A然而,其生命周期或View通过调用getViewLifecycleOwner()仍然处于开启STARTED状态RESUMED。结果,O观察到数据变化后就会播放动画,但用户从一开始就看不到它。

我们该如何解决这个问题呢?任何想法或答案表示赞赏。提前致谢。

android android-lifecycle android-fragments fragment-lifecycle android-livedata

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

如何在键盘上方显示PopupWindow?

我想PopupWindow在创建提醒时显示像Google Keep一样的虚拟键盘:

在此输入图像描述

android

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