v. 23.2
引入了设计支持库BottomSheetBehavior
,它允许协调员的子节点作为底部工作表(可从屏幕底部拖动的视图).
我想做的是作为底层视图,具有以下视图(典型的协调器+折叠的东西):
<CoordinatorLayout
app:layout_behavior=“@string/bottom_sheet_behavior”>
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView />
</CollapsingToolbarLayout>
</AppBarLayout>
<NestedScrollView>
<LinearLayout>
< Content ... />
</LinearLayout>
</NestedScrollView>
</CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
不幸的是,底部工作表视图应该实现嵌套滚动,否则它们不会获得滚动事件.如果您尝试使用主活动然后将此视图作为底部工作表加载,您将看到滚动事件仅作用于纸张的"工作表",并且有一些奇怪的行为,您可以看到是否继续阅读.
我很确定这可以通过子类化来处理CoordinatorLayout
,甚至可以通过子类化来处理BottomSheetBehavior
.你有什么提示吗?
requestDisallowInterceptTouchEvent()
应该使用,在某些条件下窃取父母的事件:
AppBarLayout
偏移量> 0时AppBarLayout
偏移量是== 0时,我们正在向上滚动(想想它一秒钟,你会看到)可以通过设置OnOffsetChanged
内部应用栏来获得第一个条件;
第二个需要一些事件处理,例如:
switch (MotionEventCompat.getActionMasked(event)) {
case MotionEvent.ACTION_DOWN:
startY = event.getY();
lastY = startY;
userIsScrollingUp = false;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
userIsScrollingUp = false;
break;
case MotionEvent.ACTION_MOVE:
lastY = event.getY();
float yDeltaTotal = startY - lastY; …
Run Code Online (Sandbox Code Playgroud)android ontouchlistener touch-event android-support-library android-support-design
在某个Android项目中,您需要在目录中导入一些drawable - 无论是工具栏图标,图像,UI功能res/drawable
.大多数你有规模最常见预选赛(图像时代drawable-hdpi
,drawable-mdpi
,drawable-xdpi
,drawable-xxdpi
,...).
因此,我们需要为每个drawable执行三个,四个甚至五个文件复制/粘贴:
external_dir/drawable-mdpi/file.png -> my_package/drawable-mdpi/file.png
external_dir/drawable-hdpi/file.png -> my_package/drawable-hdpi/file.png
external_dir/drawable-xdpi/file.png -> my_package/drawable-xdpi/file.png
external_dir/drawable-xxdpi/file.png -> my_package/drawable-xxdpi/file.png
Run Code Online (Sandbox Code Playgroud)
如果您必须导入多个图片,这很烦人.是否有一种简单,快速的方法可以file.png
在相应的包文件夹中传输这四个右侧实例?在IDE中实现了一些功能?一些简单的解决方法?
我的工作流程到现在为止:
external_dir
,搜索file.png
,获取单个列表中的四个实例,拖放到Android Studio,然后为每个图片右键单击导航栏Copy
,并Paste
在相应的包目录中.不是更好!有什么建议?
编辑 - 我当然不是真的要求"建议" - 我想知道是否有办法将移动次数减少到一个(或者这样).
我试图以fabLocation
编程方式隐藏我的FloatingActionButton :
fabLocation.setVisibility(View.GONE)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
如果我添加android:visibility="gone"
我的XML布局,fabLocation
当我运行我的活动时会隐藏它,但是当我滚动时它会重新出现.
这是我的布局:
<?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/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@color/colorOverlay"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/img_couverture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/bg_navigation_drawer_header"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp" />
<View …
Run Code Online (Sandbox Code Playgroud) android material-design floating-action-button android-design-library
我在ScrollView中有一个RecyclerView(和一些其他视图).目前,RecyclerView的布局非常小(它显示了它包含的5个中的2个项目)并且它独立于ScrollView滚动,这显然不是很好的用户体验.我想让RecyclerView不滚动和扩展,以便所有项目都可见.
(我知道在这种情况下使用RecyclerView是愚蠢的.我只是这样做,因为应用程序中的其他地方我需要一个普通的RecyclerView滚动等但是同样的内容,我不想重复代码).
我注意到使用AppCompat主题时,默认工具栏图标会被colorControlNormal
我的样式中的属性着色.
<style name="MyTheme" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/yellow</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但是,正如您在上面所看到的,所有图标都不会发生这种情况.我提供了"加号"标志,这是我从官方图标中得到的,并没有得到着色(我使用了png的"白色"版本).根据我从这个问题中理解的,系统只显示带有alpha通道的图标.这是真的?
如果是这样的话:有没有可以找到alpha定义的官方素材图标的地方?如果不是 - 并且如果工具栏图标需要仅为alpha设色 - Google如何期望我们在工具栏中使用提供的图标?
在SDK的某个地方,我发现了一些以图标结尾的图标_alpha.png
,它们实际上得到了很好的印记.不过,我需要的全套材料图标,并从官方渠道我只能找到white
,grey600
和black
人.
ColorFilter
在运行时应用会有点痛苦,而我的实际工具栏 - 有些图标有色,有些没有 - 看起来很糟糕.
这里已经讨论了很多问题,主要是不同的结果,并且由于API的变化和不同类型的URI,没有明确的答案.
我自己没有答案,但让我们谈谈它.该ExifInterface
有一个接受一个构造函数filePath
.这本身很烦人,因为现在不鼓励依赖路径 - 你应该使用Uri
s和ContentResolver
.好.
我们的Uri
名字uri
可以从意图中检索出来onActivityResult
(如果您从图库中选择图片ACTION_GET_CONTENT
)或者可以是Uri
我们之前拥有的(如果您从相机中选择图片并打电话intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
).
我们uri
可以有两种不同的模式:
file://
架构.那些很容易治疗,因为他们坚持这条道路.你可以打电话new ExifInterface(uri.getPath())
,你就完成了.content://
界面.我个人不知道那是什么,但让我发疯.据我所知,第二种情况应该用ContentResolver
你能得到的东西来对待Context.getContentResolver()
.以下适用于我测试的所有应用程序,无论如何:
public static ExifInterface getPictureData(Context context, Uri uri) {
String[] uriParts = uri.toString().split(":");
String path = null;
if (uriParts[0].equals("content")) {
// we can use ContentResolver.
// let’s query the DATA column which …
Run Code Online (Sandbox Code Playgroud) 我正在使用v7支持库并尝试在左侧安装导航抽屉.在其他地方读到我设置:
DrawerTest.java:一个主要活动,用于保存抽屉,我将工具栏加载到其中setSupportActionBar()
,来自自定义的XML布局Toolbar
;
toolbar.xml:包含工具栏的XML布局;
activity_drawer_listview.xml:一个DrawerLayout
XML资源,它包含我的片段的容器(一个FrameLayout,<including>
即2.中提到的布局)和导航抽屉(一个ListView);
FragmentTest.java:一些非常简单的片段代码,扩展Fragment
;
我会在这里粘贴一些代码,无论如何我的问题是片段布局似乎从屏幕顶部开始,而不是从底部开始Toolbar
.放在5中的任何文本都将与操作栏上的应用程序标题重叠.我哪里错了?
(1.)DrawerTest.java
public class DrawerTest extends ActionBarCompat {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer_listview);
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Toolbar tb = (Toolbar) findViewById(R.id.toolbar_main2);
ActionBarDrawerToggle abDrawerToggle = new ActionBarDrawerToggle(
this, drawerLayout, tb,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close )
{
// onDrawerClosed() { ... }
// onDrawerOpened() { ... }
};
drawerLayout.setDrawerListener(abDrawerToggle);
setSupportActionBar(tb);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
abDrawerToggle.syncState();
//code to load …
Run Code Online (Sandbox Code Playgroud) 我有这个LinearLayout
将被放置在活动布局的底部.我希望它LinearLayout
具有4dp高程,就像顶部工具栏应该具有的那样,但是,因为android:elevation
将阴影置于ui组件下方并且此特定组件(linearLayout)将位于屏幕的底部,我将看不到任何高度......
这是我的LinearLayout
代码,以及实现默认高程的图像:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3"
android:background="@android:color/transparent"
android:orientation="horizontal"
android:elevation="4dp"
android:layout_alignParentBottom="true">
<ImageButton
android:id="@+id/playButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="center"
android:clickable="true"
android:background="@drawable/bottom_toolbar_menu_selector"
android:src="@drawable/ic_play"
style="?android:attr/borderlessButtonStyle" />
<ImageButton
android:id="@+id/stopButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="center"
android:clickable="true"
android:background="@drawable/bottom_toolbar_menu_selector"
android:src="@drawable/ic_stop"
style="?android:attr/borderlessButtonStyle" />
<ImageButton
android:id="@+id/bookmarkButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="center"
android:clickable="true"
android:background="@drawable/bottom_toolbar_menu_selector"
android:src="@drawable/ic_bookmark"
style="?android:attr/borderlessButtonStyle" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
有没有办法,使用elevation
阴影放在ui组件的顶部?
提前致谢!
从多窗口文档:
多窗口模式下禁用的功能
当设备处于多窗口模式时,某些功能被禁用或忽略,因为它们对于可能与其他活动或应用共享设备屏幕的活动没有意义.这些功能包括:
- 某些系统UI自定义选项已禁用; 例如,如果应用程序未以全屏模式运行,则无法隐藏状态栏.
- 系统忽略对android:screenOrientation属性的更改.
我得到了大多数应用程序,纵向和横向模式之间的区别是没有意义的,但是我正在使用SDK,其中包含用户可以进行任何活动的摄像机视图 - 包括支持多窗口模式的活动.问题是摄像机视图包含显示摄像机预览的SurfaceView/TextureView,并且为了在所有活动方向上正确显示预览,需要有关正确活动方向的知识,以便可以正确旋转摄像机预览.
问题是我的代码通过检查当前配置方向(纵向或横向)和当前屏幕旋转来计算正确的活动方向.问题是在多窗口模式下,当前配置方向不反映真实的活动方向.这会导致相机预览旋转90度,因为Android报告的配置与方向不同.
我目前的解决方法是检查所请求的活动方向并以此为基础,但有两个问题:
即使在多窗口配置中,有没有办法可以稳健地计算正确的活动方向?
这是我目前使用的代码(请参阅有问题的部分的注释):
protected int calculateHostScreenOrientation() {
int hostScreenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
int rotation = getDisplayOrientation(wm);
boolean activityInPortrait;
if ( !isInMultiWindowMode() ) {
activityInPortrait = (mConfigurationOrientation == Configuration.ORIENTATION_PORTRAIT);
} else {
// in multi-window mode configuration orientation can be landscape even if activity is actually in portrait and vice versa
// Try determining from requested orientation (not entirely correct, …
Run Code Online (Sandbox Code Playgroud) camera android multi-window android-camera android-7.0-nougat
我很确定这是一个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