- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我指的是 Cheesesquare app.我目前的设计要求略有不同..
像这样的(忽略图片和名称下面的部分)
我想要圆形图像右下角的 float 操作按钮和它下面的人的名字(这将是 CollapsingToolbarLayout 标题)。
到目前为止,我能够做到这一点 -
此布局的问题是,我无法下拉图片下方的标题,也无法重新定位 float 操作按钮。
这是我正在使用的布局(从 cheesesquare app 稍作修改)
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:custom="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="@dimen/detail_backdrop_height"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleTextAppearance="@style/HeaderTitleStyle"
app:expandedTitleMarginEnd="64dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_collapseMode="parallax"
android:fitsSystemWindows="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imgProfileUserImage"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/cheese_1"
android:alpha="0.35" />
<Cheesesquare.Utils.CircleImageView
android:layout_width="180dp"
android:layout_height="180.0dp"
android:id="@+id/imgProfileCircleImage"
android:src="@drawable/cheese_2"
custom:border="true"
custom:border_color="#d5d5d5"
custom:border_width="4dp"
custom:shadow="true"
android:layout_gravity="center"
android:minHeight="80dp"
android:minWidth="80dp" />
</FrameLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</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"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="24dp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/card_margin">
<LinearLayout
style="@style/Widget.CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Info"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cheese_ipsum" />
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/card_margin"
android:layout_marginLeft="@dimen/card_margin"
android:layout_marginRight="@dimen/card_margin">
<LinearLayout
style="@style/Widget.CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Friends"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cheese_ipsum" />
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/card_margin"
android:layout_marginLeft="@dimen/card_margin"
android:layout_marginRight="@dimen/card_margin">
<LinearLayout
style="@style/Widget.CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Related"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cheese_ipsum" />
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:layout_height="wrap_content"
android:id="@+id/uploadPhotoButton"
android:layout_width="wrap_content"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
android:src="@drawable/ic_discuss"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"/>
不胜感激 :-)
更新
最佳答案
问题 1.在折叠关联 View 时隐藏锚定 View 。
据我所知, anchor 属性确实对折叠时隐藏 View 的可能性有一些奇怪的影响。如此久经考验的解决方案是以编程方式执行它:
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
/**
* verticalOffset changes in diapason
* from 0 - appBar is fully unwrapped
* to -appBarLayout's height - appBar is totally collapsed
* so in example we hide FAB when user folds half of the appBarLayout
*/
if (appBarLayout.getHeight() / 2 < -verticalOffset) {
fab.setVisibility(View.GONE);
} else {
fab.setVisibility(View.VISIBLE);
}
}
});
问题2.如何将view直接绑定(bind)到圆图的border上。
不幸的是,“CircleView”是一个普通的矩形 View 。您可以通过设置它的背景参数轻松验证这一点。
因此,在您的情况下,FAB 锚定到 View 的角而不是圆形边界处的点。我可以建议的解决方案如下:
这里我们使用包装器布局,以避免通过其边距重新定位锚定 View 的潜在问题。
值 0.2928 是一个系数,用于计算正方形的角点到最近的内切圆点的距离。
毕竟这个神奇的 FAB 应该变成这样的东西(假设我们将 FAB 绑定(bind)到宽度 == 180dp 的圆形图像,如问题中所示):
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="53dp"
android:paddingRight="53dp"
app:layout_anchor="@+id/imgProfileCircleImage"
app:layout_anchorGravity="bottom|right">
<android.support.design.widget.FloatingActionButton
android:id="@+id/uploadPhotoButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/ic_discuss" />
</FrameLayout>
已编辑
可以改进第二种解决方案以避免手动计算填充。我们只需要可以自己执行它们的自定义布局:
public class CustomFrameLayout extends FrameLayout {
public CustomFrameLayout(Context context) {
super(context);
}
public CustomFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
setupPaddings(context, attrs);
}
public CustomFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setupPaddings(context, attrs);
}
private void setupPaddings(Context context, AttributeSet attrs) {
int diameter = 0;
TypedArray attrArray = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.FabLayout,
0, 0);
try {
diameter = attrArray.getInteger(R.styleable.FabLayout_anchor_diameter, 0);
} finally {
attrArray.recycle();
}
int padding = (int) Math.round((double) diameter * (1d - 1d / (Math.sqrt(2d)))); // in dips
int paddingPx = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, padding, getResources().getDisplayMetrics()));
String xmlAnchorGravity = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "layout_anchorGravity");
int gravity = Integer.parseInt(xmlAnchorGravity.substring(2), 16);
int top = ((gravity & 0x30) == 0x30) ? 1 : 0;
int bottom = ((gravity & 0x50) == 0x50) ? 1 : 0;
int left = ((gravity & 0x03) == 0x03) ? 1 : 0;
int right = ((gravity & 0x05) == 0x05) ? 1 : 0;
setPadding(left * paddingPx,
top * paddingPx,
right * paddingPx,
bottom * paddingPx);
}
}
并在 declare-styleable 中为其声明附加属性:
<declare-styleable name="FabLayout">
<attr name="anchor_diameter" format="integer" />
</declare-styleable>
然后我们可以替换它:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="53dp"
android:paddingRight="53dp"
...
更合适的形式:
<com.example.CustomFrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:anchor_diameter="180"
...
关于android - CollapsingToolbarLayout 和 CollapsingToolbarLayout 内的 float 操作按钮位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33080351/
我指的是 Cheesesquare app.我目前的设计要求略有不同.. 像这样的(忽略图片和名称下面的部分) 我想要圆形图像右下角的 float 操作按钮和它下面的人的名字(这将是 Collapsi
我在给定 ScrollingActivity 的 Android Studio 中的 CollapsingToolbarLayout 有问题。 向下滚动 Action 完美无缺,但当我想向上滚动时,它
我正在尝试将包含 ImageView 按钮和其他 UI 元素的 LinearLayout 放置在 CollapsingToolbarLayout 中,这可能吗? 最佳答案 CollapsingTool
我正在使用 CollapsingToolbarLayout 和一个 viewpager。 Viewpager 由 RecyclerView 组成。但是,当滚动回收器 View 时,工具栏不会折叠。 a
我正在尝试控制 collpasingtoolbarlayout 的快照滚动标志的滚动行为。按照这个教程linkSCROLL_FLAG_SNAP:在滚动结束时,如果 View 只是部分可见,那么它将被捕
我正在为我的 fragment (选项卡)使用 CollapsingToolbarLayout 和 View 页面。
如果我将依赖项从 23.1.1 更新到 23.2.0,CollapsingToolbarLayout 将无法正常工作。应用崩溃并抛出错误。 java.lang.RuntimeException:and
在我的 CoordinatorLayout 中,我有以下安排: 我希望我的自定义 T
我在使用 Android 设计支持库时发现我的应用程序存在问题,因为 CollapsingToolbarLayout 顶部似乎有一个主题色背景栏,即使有足够的空间(因此它应该是“透明的” '). 知道
我开始在我的应用中使用折叠工具栏。按照他们在 Android 开发人员博客上的方式实现后,它似乎无法正常工作。我看到溢出和向上导航按钮,但是当我向下滚动时它们不跟随工具栏。这video这是应该发生的事
我的布局应该是这样的: 有一些问题需要解决: constraintLayout(下周,购物文本)应该位于工具栏底部。 标题文本Next week 滚动完成后可以平滑移动到工具栏中心 水平进度条在con
我似乎无法在我的代码中找到错误。 CollapsingToolbarLayout 没有显示标题,即使我设置了一个。它显示后退按钮但不显示标题,它仍然是普通工具栏的高度。 在工具栏上设置标题或 getS
在我的 MainActivity 中,我有一个 CollapsingToolbarLayout。默认情况下,工具栏是展开的。但我希望它被折叠。因此,正如 StackOverflow 问题中所建议的那样
我有一个触发 CollapsingToolbarLayout 的 RecyclerView,当我尝试在 4.2.2 上重新打开折叠的工具栏时,出现以下崩溃。有什么想法吗? java.lang.Ille
如果有人能给我一些建议来解决我的最新问题,我将不胜感激。 我有一个带有 CollapsingToolbarLayout 的 Activity 。在未折叠状态下,我无法让按钮工作。我不知道如何解决这个问
我将支持设计库的修订版更新到 23.0.1 并得到了这样的行为 - 当侧抽屉重叠时标题消失(抽屉是带有自定义子项的简单 LinearLayout)。没有问题,当我使用 rev. 22.2.1。您对隐藏
在我的应用程序中,我实现了一个包含 Facebook 图片和文本的 CollapsingToolbarLayout,如下图所示: 当图片包含太多白色时,我遇到了一个问题,工具栏 图标保持不可见。 我想
我将 CoordinatorLayout 与 AppBarLayout 和 CollapsingToolbarLayout 一起使用。内容还有一个 NestedScrollView。当我在 Colla
我在带有 RelativeLayout 的 AppBarLayout 中有 CollapsingToolbarLayout
我正在尝试使用我在 CollapsingToolbarLayout 中编写的自定义 View ,但触摸事件似乎无法通过手势检测正确传播到我的自定义 View 。结果是滚动和与 View 的交互无法按预
我是一名优秀的程序员,十分优秀!