如何使用不同形状和高度的按钮实现按钮栏?举个例子(请原谅我这个快速模型的糟糕绘图技巧):
示例条有3个按钮,中间按钮(3)的形状和高度与其他2个按钮(1,2)不同。按钮栏将是一个包含并合并到其他视图中的视图,以便看起来漂浮在父视图的顶部。
我正在考虑将按钮1和2实现到布局中,然后将按钮3作为另一种布局,然后将其与前两个按钮的布局合并。
4 个答案:
答案 0 :(得分:1)
像我以前的同志所说的那样,你需要某种布局或容器可以有背景(如果你希望按钮#3在它上面胡佛)然后使用相对布局混合这两者除了复杂性之外的其他缺点是因为它们位于不同的布局中,所以你无法与其他两个按钮相关联。
更优雅的解决方案可能是有一个特殊的背景可绘制,可以:
- 有一个方法setCurrentHeight(),它将指定实际可查看部分应具有的高度,其余部分将填充透明色。
- 覆盖它自己的绘制,所以就在它绘制之前它会有一个回调函数,回调你可以自己注册。
醇>
然后您可以在活动中注册回调以获取#3按钮的当前位置并相应地设置高度,这样您仍然可以使用一个特殊drawable作为背景的布局。
自定义LevelDrawable可能会有所帮助。
答案 1 :(得分:1)
我会按如下方式布置此栏:
- RelativeLayout作为其余部分的容器,其高度设置为wrap_content和alignparentbottom = true
- 栏的ImageView
- 2个具有透明背景的按钮(按钮1和2)
- 按钮3是一个自定义按钮,其中自定义图像为梯形作为背景
所以你将有一个类似的布局:
<RelativeLayout
...>
<ImageView
.../>
<Button
... Button 1 />
<Button
... Button 2 />
<Button
... Button 3 />
</RelativeLayout>
答案 2 :(得分:1)
我不知道这会起作用,我无法测试它,但你可能会尝试这样的东西;我相信它可以通过XML优雅地完成。
- 拥有一个包含所有视图的RelativeLayout(id:mainLayout),包含两个维度的wrap_content。
- 将第一个孩子视为背景栏的空白视图
- 将视图的背景颜色/图像设置为您想要的颜色/图像; layout_width to fill_parent; layout_height to wrap_content; layout_alignTop = “@ ID / leftButton”; layout_alignBottom = “@ ID / leftButton”。
- 为中心按钮添加ImageButton(id:bigButton),为两个维度添加wrap_content; layout_centerInParent = “真”。
- 为左侧按钮添加ImageButton(id:leftButton),为两个维度添加wrap_content; layout_toLeftOf = “@ ID / bigButton”; layout_centerInParent = “真”。
- 为右侧按钮添加ImageButton(id:rightButton),为两个维度添加wrap_content; layout_toRightOf = “@ ID / bigButton”; layout_centerInParent = “真”。
醇>
在我的脑海中,我相信这有效,但我可能会离开。无论如何,要考虑的事情,我希望它可以帮助您找到解决方案。 :)
答案 3 :(得分:0)
最好你可以使用不同的按钮样式或按钮“3”
的相对布局进行tablelayout