我已经看到了一些SO问题,他们提供了一些可能的方法来实现我想要的.例如:
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,既没有用.
backgroundTint在布局中使用属性.
所以我加入android:backgroundTint="#5677FC"我的TextView.还是没用.然后我试着改变android:backgroundTintMode,src_in并且src_atop,他们永远不会有所作为.
那么,当我?attr/selectableItemBackground用作背景时,如何改变波纹颜色.我只关注棒棒糖及以上.先感谢您!
android android-appcompat android-layout material-design android-5.0-lollipop
是否可以使用最新版本的android中使用的新DatePickerDialog和TimePickerDialog样式?他们可以在这里看到:新款日期和时间选择器
我试着寻找AOSP项目的最新资源,但是使用该代码的事件,我仍然得到旧的(使用微调) - 他们使用相同的DatePickerDialog和TimePickerDialog类,所以我没有想到任何其他东西.
谢谢你的帮助.
我在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_height那RelativeLayout和EditText既是wrap_content.用户可以在EditText没有任何长度/线条限制的情况下输入,以便每个项目的高度不同.
然后我发现getItemCount()在Adapter返回true值但onBindViewHolder()被调用错误的时间(少于它应该),因此不足以显示所有项目.
我发现这只会在我写的时候发生recyclerView.setNestedScrollingEnabled(false).但我不能删除这一行.因为如果我这样做了,RecyclerView它就不会顺畅地滚动,并且与其他内部ScrollView和ScrollView自身的观点不一致.
这发生在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
我使用了支持库v7-21,但RecyclerView显示不正确.
GridLayoutManager并且LinearLayoutManager是好的.只有在StaggeredGridLayoutManagerI加载我DataSet然后刷新数据时才会出现问题.数据刷新工作正常,但RecyclerView视图存在于屏幕外.
有谁知道如何解决它?
有两个要求:
Intent选择器中,应该只有电子邮件应用程序.我所知道/做过的事:
Intent.ACTION_SENDTO与intent.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)有问题谈论这个问题,但我没有通过现有的答案解决我的问题.
这是我的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 …
我目前正在为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层的纹理,一个用于MediaPlayer和SurfaceTextureAndroid中获得的团结也应该有内部的图像数据的视频帧和另一个.第一个应该是GL_TEXTURE_EXTERNAL_OES(我们简称为OES纹理)和第二个类型GL_TEXTURE_2D(让我们称之为2D纹理).这两个生成的纹理在开始时都是空的.当绑定时MediaPlayer,OES纹理将在视频播放期间更新,然后我们可以使用a FrameBuffer在2D纹理上绘制OES纹理的内容.
我写了这个过程的纯Android版本,当我最终在屏幕上绘制2D纹理时,它的效果非常好.但是,当我将其作为Unity Android插件发布并在Unity上运行相同的代码时,将不会显示任何图片.相反,它只显示预设颜色glClearColor,这意味着两件事:
FrameBuffer- > 2D纹理的转移过程完成,Unity确实接收到最终的2D纹理.因为glClearColor只有在我们绘制OES纹理的内容时才会调用它FrameBuffer.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) 我为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
我通过创建和绑定由于特殊视图类型的唯一ViewHolderin 创建了标题视图RecyclerView.标题是完全空白的,但它是全跨度的,当用户滚动时,它的高度可以很好地计算后续动画RecyclerView:
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.
我想用LiveDatainFragment来观察一些数据的变化。现在我们假设:
Fragment A都有Fragment B自己的容器布局Activity,这意味着我们将FragmentTransaction#add()单独调用它们,并且由于没有任何操作,它们的onPause()或onResume()在添加(UI 更改)期间不会被调用FragmentTransaction#replace()。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