我有一个持久的底部工作表(基本上是一个按钮)和一个回收器视图,它们都包含在 CoordinatorLayout 中。
当底部工作表展开时,我不希望它遮挡回收站视图。我可以通过分别app:layout_insetEdge="bottom"在底部工作表和app:layout_dodgeInsetEdges="bottom"回收站视图中进行设置来实现这一点。
但是,由于回收器视图的高度设置为android:layout_height="match_parent",当底部工作表展开时,它的顶部部分移出屏幕。
相反,我希望回收器视图根据底部工作表的高度动态调整其高度,使其不再移出屏幕。我怎样才能做到这一点?
这是完整的布局:
<?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:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
app:layout_dodgeInsetEdges="bottom" />
<Button
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/update_all"
android:foreground="?attr/selectableItemBackground"
android:background="@drawable/angled_button"
app:behavior_hideable="false"
app:behavior_peekHeight="0dp"
app:layout_insetEdge="bottom"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
编辑:添加了截图
编辑 2:添加了 GIF
user-interface android material-design android-coordinatorlayout bottom-sheet
我想要一个带有两个笔画的按钮样式,它们之间有一些间距。我的第一种方法并不令人满意,因为在角落里笔画之间的间距是不同的:

灰色笔划应紧密围绕蓝色渐变,白色笔划的圆角半径应适合其他笔划。
这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape android:shape="rectangle">
<padding android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"/>
<stroke
android:width="1dp"
android:color="#7F7F7F"/>
<corners
android:radius="6dp"/>
</shape>
</item>
<item >
<shape android:shape="rectangle">
<padding android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"/>
<gradient
android:startColor="@color/colorBlueLight"
android:endColor="@color/colorBlueDark"
android:angle="270"/>
<corners
android:radius="6dp" />
</shape>
</item>
<item >
<shape android:shape="rectangle">
<padding android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"/>
<stroke
android:width="2dp"
android:color="#FFFFFF"/>
<corners
android:radius="6dp"/>
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud) 我想将不同类型的列表添加到列表中.这是我的方法:
struct Column
{
public string title;
public List<dynamic> col;
}
var signals = new List<Column>();
signals.Add(new Column {title = "stringCol", col = new List<string>() });
signals.Add(new Column {title = "doubleCol", col = new List<double>() });
Run Code Online (Sandbox Code Playgroud)
它说List<string>无法转换为List<dynamic>.我也试过使用模板,但我没有运行它.
我即将调整我的源代码到Qt中的新信号和插槽语法.虽然下面陈述的代码与不推荐使用的const char* signal参数运行良好,但它不适用于新QMetaMethod &signal语法.
class SignalWaiter : public QObject {
Q_OBJECT
public:
SignalWaiter(const QObject* sender, const QMetaMethod &signal);
private slots:
void signalCaught();
};
SignalWaiter::SignalWaiter(const QObject* sender, const QMetaMethod &signal) {
QObject::connect(sender, signal, this, &SignalWaiter::signalCaught);
}
void SignalWaiter::signalCaught() {
}
Run Code Online (Sandbox Code Playgroud)
编译器在connect()命令处停止并显示以下消息:
错误:C2664:'QMetaObject :: Connection QObject :: connect(const QObject*,const char*,const char*,Qt :: ConnectionType)const':无法将参数2从'const QMetaMethod'转换为'const char*'
和
没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符
很明显,编译器尝试使用旧语法调用重载的connect方法.我究竟做错了什么?