Android Studio中TileView添加固定底部元素问题求助
解决方案:固定底部菜单不受TileView缩放平移影响且可复用
核心思路是把TileView和底部菜单放在同一个顶层容器的同级位置,让菜单脱离TileView的管辖范围,这样TileView的缩放和平移就不会影响到它了。同时把菜单做成独立布局文件,方便在其他Activity复用。
步骤1:创建可复用的底部菜单布局
新建menu_bottom.xml,这个布局可以直接在任何Activity里复用:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center_horizontal" android:padding="8dp"> <ImageView android:id="@+id/btn_bottom_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bottombarclosed" android:background="@drawable/bottombarclosed"/> </LinearLayout>
这里用layout_gravity="bottom|center_horizontal"直接把菜单固定在底部中央,不用额外写布局参数代码。
步骤2:修改Activity代码,用顶层容器管理TileView和菜单
把原来直接设置TileView为ContentView的方式,改成用一个顶层FrameLayout作为根容器,同时容纳TileView和底部菜单:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 1. 创建顶层根容器,用来承载TileView和底部菜单 FrameLayout rootLayout = new FrameLayout(this); rootLayout.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT )); // 2. 初始化并配置你的TileView(保留原有逻辑) TileView tileView = new TileView(this); tileView.setSize(5600, 5000); tileView.addDetailLevel(.15f, "tile-1-1.png", 200, 100); // 添加TileView内部的可缩放内容(你的原有代码) RelativeLayout tileContentLayout = new RelativeLayout(this); RelativeLayout.LayoutParams contentParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); contentParams.addRule(RelativeLayout.CENTER_IN_PARENT); // 这里添加你的TileView内部元素... tileView.addScalingViewGroup(tileContentLayout); // 把TileView添加到根容器,占满整个屏幕 rootLayout.addView(tileView, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT )); // 3. 加载可复用的底部菜单并添加到根容器 LayoutInflater inflater = getLayoutInflater(); View bottomMenu = inflater.inflate(R.layout.menu_bottom, rootLayout, false); rootLayout.addView(bottomMenu); // 4. 设置根容器为Activity的ContentView setContentView(rootLayout); }
为什么之前的尝试无效?
- 把菜单加在TileView内部:TileView的设计逻辑是内部视图默认会跟随它的缩放和平移,哪怕不用
addScalingViewGroup,它的变换也会影响直接添加的子View,所以菜单跟着动了。 - 把TileView加到菜单布局里:TileView是全屏的,会直接覆盖在菜单上方,而且TileView的实时重绘会把菜单完全挡住,导致菜单只显示一瞬间就消失。
复用方式
在其他需要这个底部菜单的Activity里,只需要重复步骤3的代码:加载menu_bottom.xml并添加到当前Activity的根容器即可,完全不用修改菜单布局本身。
内容的提问来源于stack exchange,提问作者Timothy Bomer
相关产品推荐
相关产品推荐

