昨天解决的Toolbar的title和Navigation的边距问题,
但是事实应该是这样的
网上的那些padding=0dp之类的均已不适合,翻看了父级的style发现多了一条
contentInsetStartWithNavigation=72dp
于是这就是那个问题的原因了,在xml里加上
app:contentInsetStartWithNavigation="0dp"
,我本来想这样写一个style,然后在style里设置这个属性,但是并未生效,在xml里才会生效,这里暂时不清楚原因,没深究,以后知道了再补上
今天写这篇博文,为什么说是巨坑,因为一个操作逻辑,你明明是很清楚流程,也没什么复杂操作,但是就是达不到你预想的要求,先看问题
毫无疑问,这是不正常的。于是我尝试了很多,谷歌了很多,甚至去研究通过其他的方式去实现,比如代码方式实现布局
代码自定义布局嘛,需要去ids.xml里设置id,今天才接触到,以前还以为那个是自动生成的,活久见啊
<resources> <item name="fragment" type="id"/> </resources>
activity代码
LinearLayout layout = new LinearLayout(this);//为本Activity创建一个线性//并且设置它的属性 android:layout_width 与 android:layout_height 都为 FILL_PARENT布局对象 //并且设置它的属性 android:layout_width 与 android:layout_height 都为 MATCH_PARENT LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT); //Toolbar的初始化 Toolbar toolbar = (Toolbar) getLayoutInflater().inflate(R.layout.activity_setting,null); LinearLayout.LayoutParams fragmentLayout=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); layout.addView(toolbar,fragmentLayout); //新建一个FrameLayout FrameLayout frameLayout=new FrameLayout(this); //这里使用上面设置的id frameLayout.setId(R.id.fragment); LinearLayout.LayoutParams frameLayoutParams=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); //添加这个View layout.addView(frameLayout,frameLayoutParams); //设置这个layout setContentView(layout,layoutParams); //这里再去替换,但是未能成功,没有深究,记录在此 this.getFragmentManager().beginTransaction() .replace(R.id.fragment, new SettingsFragment()) .commit();
于是,学习了下代码实现布局。。。。。但是问题并没有解决,想换回Actionbar但是那个contentInsetStartWithNavigation又不能解决,style里设置后会出现些其他问题,网上说明也很少,按逻辑来却不正确。。。所以放弃
在Stack Overflow看了很多相关问题,发现我的和他们的并不一样,于是开始深思,为什么,这么一个没人遇到的问题,我却折腾了这么久,能力问题? 不,绝对不会,按我平时给别人解决bug,这绝对是粗心问题,正好项目答辩开始,我上去瞎说一段下来后,,发现了一个问题,这是最致命的,xml代码
<FrameLayout android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
看到了吗?content。。。java代码
this.getFragmentManager().beginTransaction() .add(androidR.id.content, new SettingsFragment()) .commit();
而这里,是
android.R.id.content
别问我他们两个有什么关系,我只知道想给自己一巴掌,最后问题解决,一点毛病没有,原来的代码也不用去改。
之前还想过用空的
PreferenceCategory
去顶上去,各种天马行空,输给了一个id。。。。。
特此记录,2017.7.31
参考:http://blog.csdn.net/zhcswlp0625/article/details/55211904
天坑都是出在细节上,注意细节,才是一个好程序员的第一步,也是节约时间成本的一个方法
本站由以下主机服务商提供服务支持:
0条评论