我很确定这是一个bug,所以我要求解决方法.我的布局如下:
<CoordinatorLayout>
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView/>
<Toolbar/>
</CollapsingToolbarLayout>
</AppBarLayout>
<android.support.v4.widget.NestedScrollView/> <!-- content here -->
</CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
我正在从网上检索内容,我不知道它有多高 - 可能是几行,可能很长.但是,我发现CollapsingToolbar
当内容不足以覆盖整个屏幕时效果不佳.案例:
content.height > screen.height
:工作; 滑动顶部/底部展开和折叠工具栏,以及滚动内容;
content.height < screen.height
:没有.这是不是好,因为大部分的时间(content.height + expandedToolbar.height) > screen.height
!
换句话说,当内容不够高时,即使内容+ expandedToolbar比整个屏幕高得多,它也不会对滚动手势做出反应并显示一些错误 - 可能需要十个手势来折叠工具栏一点点.因此,您很难到达内容的底部,因为工具栏已展开,所以内容隐藏在底部.
任何解决方法?
如果你想尝试,只需采取cheesesquare示例项目并删除(或减少)NestedScrollView
activity_detail.xml中的内容[API17 here]
android android-support-library android-design-library androiddesignsupport
对于了解其机制或愿意深入了解源代码的人来说,这是一个关于RecyclerView内部行为的问题.我希望通过对源代码的引用来支持答案.
(向下滚动到'换句话说'以获得更集中的问题)
我需要了解notify*
行为(例如notifyItemInserted()
)是如何排队的.想象一下,我有一个由此列表备份的适配器:
ArrayList<String> list = Arrays.asList("one", "three", "four");
Run Code Online (Sandbox Code Playgroud)
我想补充的价值观zero
和two
,即失踪.
list.add(1, "two");
// notify the view
adapter.notifyItemInserted(1);
// Seconds later, I go on with zero
list.add(0, "zero");
// notify the view
adapter.notifyItemInserted(0);
Run Code Online (Sandbox Code Playgroud)
这非常简单明了,无话可说.
但是,如果两个动作彼此非常接近,并且两者之间没有布局传递怎么办?
list.add(1, "two");
list.add(0, "zero”);
Run Code Online (Sandbox Code Playgroud)
我现在应该怎么做?
adapter.notifyItemInserted(1);
adapter.notifyItemInserted(0);
Run Code Online (Sandbox Code Playgroud)
或者可能
adapter.notifyItemInserted(2);
adapter.notifyItemInserted(0);
Run Code Online (Sandbox Code Playgroud)
?从适配器的角度来看,列表立即切换one, three, four
到zero, one, two, three, four
第二个选项似乎更合理.
list.add(0, “zero”);
adapter.notifyItemInserted(0);
list.add(2, “two”);
adapter.notifyItemInserted(...)
Run Code Online (Sandbox Code Playgroud)
现在怎么样?1
还是2
?该列表之后立即更新,但我确信它们之间没有布局传递.
你遇到了主要问题,我想知道在这些情况下我应该怎么做.真实情况是我有多个异步任务以一个 …
我使用新的设计库有一个非常标准的布局:
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView/>
<Toolbar/>
</CollapsingToolbarLayout>
</AppBarLayout>
<android.support.v4.widget.NestedScrollView/> <!-- content here -->
Run Code Online (Sandbox Code Playgroud)
我想要做的是完全隐藏整个AppBarLayout
程序,暂时摆脱Toolbar
它及其崩溃功能.
所以我称之为:
private void disableCollapsing() {
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
p.setScrollFlags(0);
collapsingToolbarLayout.setLayoutParams(p);
}
Run Code Online (Sandbox Code Playgroud)
禁用折叠行为(效果很好),最后这个:
@Override
public void hide() {
final AppBarLayout layout = (AppBarLayout) findViewById(R.id.appbar);
layout.animate().translationY(-layout.getHeight())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
layout.setVisibility(View.GONE);
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)
我将AppBarLayout转换为顶部(工作顺利),并且在动画集的末尾是可见性View.GONE
.
在动画结束时,无论我是否也将可见性设置为GONE,我都无法获得之前占用的空间AppBarLayout
.我的NestedScrollView仍然局限在屏幕的下半部分,好像AppBarLayout仍在那里(不是).我该如何解决?
隐藏之前:
隐藏后(AppBar翻译到顶部):
如您所见,顶部空间是空的,无法访问.滚动视图在其之前的边距内滚动,就好像可见性变化不是由CoordinatorLayout
.
我试过打电话coordinator.requestLayout()
,没有成功.
我也尝试将AppBarLayout设置app:anchor
为我的NestedScrollView,但这会搞砸 - 滚动视图最终会在隐藏之前占据整个屏幕.
我想Behavior
在进入这个 …
android android-layout android-design-library android-coordinatorlayout
我开始处理a中的偏好PreferenceFragment
.这就是我所拥有的:
我试着:
摆脱物品之间的分隔物.我想这可以从样式中定义,但我无法弄清楚如何.我尝试ListView
在运行时调用
获取首选项findViewById(android.R.id.list)
,因为我在某处读取,但它返回null.
设置新的,全宽有权在头顶部分隔,如看到这里.例如,在这种情况下,我想在"Statistiche"上方的全宽度分隔符,但不在列表顶部的"Generali"之上.
我想到的唯一方法是将分隔线设置为假偏好,例如:
<Preference
android:layout="@layout/divider" //here I set width and a divider resource
/>
<PreferenceCategory ... />
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是我的PreferenceFragment
(或者ActionBarActivity
它的)有一些左/右填充,这使得我添加到preferences.xml中的任何分隔符都不会覆盖整个宽度.
所以我的问题是:
如何摆脱图片中可以看到的默认项目分项?
如何在标题上方设置全宽分隔符,或者如何摆脱内部片段/活动填充?当然,我的活动布局没有任何(显式)填充.
android android-preferences android-listview android-fragments
在我的项目中,我RecyclerView
在我的列表中使用CardView
.在我的列表中,我必须CardView
根据设备动态设置角半径.
有没有办法动态设置cardview转角半径值?
谢谢.
我真的很好奇如何确定(来自外部类)是否onCreateView()
已经调用了一个片段.我搜索过类似的问题但没有找到.
例如,是fragment.isAdded()
一个很好的指标?
我的第一个想法很简单fragment.getView() != null
,但我并不是100%肯定它看起来是可靠的,而且我也不太愿意使用它(没有特别的原因,我只是倾向于避免无效检查).我很乐意找到一个解决方法.我的建议:
被添加()
如果片段当前已添加到其活动,则返回true.
在我看来,这条线很模糊; 添加没有附加,但都没有创建.它可能是指FragmentTransaction.add()
(这在语义上是错误的,因为你可以<fragment>
在你的布局中卡住而不必调用add
或replace
).
尽管如此,FragmentTransaction.add()
文档没有提供信息也没有让你思考added -> created
.我会说不.
ISVISIBLE()
如果片段当前对用户可见,则返回true.这意味着:(1)已添加,(2)其视图附加到窗口,(3)未隐藏.
在某种意义上看起来很好,isVisible() -> isCreated
但第三种选择使它成为现实isCreated != isVisible
.我只想到一个视图分页器中的片段:并非所有片段都可见,但是当前可见片段附近的片段被添加,创建和存活,您可以调用它们上的方法.但对他们来说,isVisible() == false
.这有点太严格了.
isInLayout()
如果布局通过<fragment>标记包含在活动视图层次结构中,则返回true.当通过<fragment>标记创建片段时,这将始终为真,除非旧片段从先前状态恢复且未出现在当前状态的布局中.
我不认为这适用于此.
getView()!= null
返回片段的根视图,如果没有布局,则返回null.
这看起来仍然是唯一的解决方案.我只想确认一下.
实现回调
..被称为onCreateView()
或更好onViewCreated()
.但:
getView != null
.android android-lifecycle android-fragments android-activity
现在已经有一段时间了,Instant Run不再工作了,也就是说,它比标准版本慢.
AOSP错误跟踪器中有一些材料,但我无法解决这个问题.我相信你们中的一些人会有所帮助.
建设大约需要1.30分钟.
我第一次运行应用程序,然后应用一些小的更改.例如,更改int a = 1
为int a = 2
方法内部或更改字符串.
然后再次单击运行.怎么了:
assembleDebug
我的所有模块).大约需要1.30分钟.第二轮继续,只是打电话app:assembleDebug
.大约需要一分钟:
16:27:10 Executing tasks: [:app:assembleDebug]
16:28:16 Gradle build finished in 1m 5s 264ms
16:28:22 Instant Run applied code changes and restarted the app.
Run Code Online (Sandbox Code Playgroud)在第一轮中,没有任何输出到事件日志或Gradle控制台.在第二轮中,Gradle控制台会输出大量内容并以此结束
BUILD SUCCESSFUL
Total time: 51.385 secs
PREDEX CACHE HITS: 0
PREDEX CACHE MISSES: 45
Stopped 0 compiler daemon(s).
Run Code Online (Sandbox Code Playgroud)
我在我的grade.properties
文件中有这些:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.daemon=true
Run Code Online (Sandbox Code Playgroud)
build.gradle
文件中没有与dex相关的内容.不使用杰克.Android Studio 2.2.3.
使用AppCompat将Material Design设置为首选项的最佳方法是什么?我一直在阅读一些问题,主要观点似乎是:
该官方指南 建议避免PreferenceActivity
,如果工作了API> 11(和我).相反,应该使用PreferenceFragment
s;
使用PreferenceActivity将是坏还因为你不能既延长PreferenceActivity
和ActionBarActivity
;
您可以使用常规ActionBarActivity
并加载PreferenceFragment
(API> 11).这样,从资源加载的首选项小部件被AppCompat着色,但对于任何小部件都不是这样(参见此处);
无论如何,使用建议的解决方案,即使从AppCompat主题继承,整个UI外观也不完全是Material(请参阅Android 4.2上的图像).
另一种方法是扩展PreferenceActivity
(API> 1).如上所述,您不会扩展ActionBarActivity
,只是继承AppCompat主题.
最后,您可以自己扩展Activity ActionBarActivity
,并自行处理小部件,布局,边距,SharedPreferences.
目前我不知道有效的解决方案.我在Chris Banes的帖子中看到了一些介绍材料的讨论,但没有提出任何解决方案.我在问:
我无法隐藏我的FloatingActionButton
.这是我的代码:
XML:
<CoordinatorLayout>
<AppBarLayout android:id="@+id/appbar">
<CollapsingToolbarLayout>
<ImageView/>
<android.support.v7.widget.Toolbar />
</CollapsingToolbarLayout>
</AppBarLayout>
<NestedScrollView />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"/>
</CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
我打电话给:
fab.clearAnimation();
fab.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
我试图隐藏FAB,但似乎setVisibility
+ clearAnimation
如果FAB在a中则不起作用CoordinatorLayout
.
即使我打电话fab.clearAnimation
,动画仍然会被触发.谁能帮我?
android android-support-library material-design android-design-library
该setTitle()
方法CollapsingToolbarLayout
已经有一些错误(如只在滚动后显示,固定v22.2.1
).
今天我更新了v23.0.0
,它根本就没有用,就像没有显示标题一样.通过延迟多次调用它,我可以看到有时标题就在那里,但它确实不可靠(比如,你切换到另一个片段,然后回到第一个,并且不再有标题).
我发现有一个新属性,app:titleEnabled
或者CollapsingToolbarLayout.setTitleEnabled(boolean)
.我已将两者都设置为true,但实际上并没有改变任何东西.
你们中的任何一个人都有同样的行为吗?
我想知道市场上有多少应用程序正在使用这个设计库,它已经从第一个版本充满了错误并且没有变得更好.
通过进一步的测试,似乎(我不是100%肯定)它连接到新的AppBarLayout.setExpanded()
api.
如果我打电话:
collapsingToolbar.setTitle("title");
Run Code Online (Sandbox Code Playgroud)
它有效,但如果我打电话
collapsingToolbar.setTitle("title");
appbarLayout.setExpanded(true, true);
//OR
appbarLayout.setExpanded(true, true);
collapsingToolbar.setTitle("title");
Run Code Online (Sandbox Code Playgroud)
它没有 - 没有标题显示.同样setExpanded(false, true)
,即试图折叠工具栏.
好吧,不.即使我从不打电话abl.setExpanded()
或问题,这个问题仍然存在app:expanded
.此外,我们现在在v23.0.1上,但仍未解决.看起来我们中只有少数人正在体验它,因为我在这里找不到任何东西,也没有在官方的bug列表中找到.我在这里提交了一个错误.