一次巨坑带来的收获 – PreferenceFragment


昨天解决的Toolbar的title和Navigation的边距问题,

image.png

但是事实应该是这样的

image.png

网上的那些padding=0dp之类的均已不适合,翻看了父级的style发现多了一条

contentInsetStartWithNavigation=72dp

于是这就是那个问题的原因了,在xml里加上

app:contentInsetStartWithNavigation="0dp"

,我本来想这样写一个style,然后在style里设置这个属性,但是并未生效,在xml里才会生效,这里暂时不清楚原因,没深究,以后知道了再补上

今天写这篇博文,为什么说是巨坑,因为一个操作逻辑,你明明是很清楚流程,也没什么复杂操作,但是就是达不到你预想的要求,先看问题

image.png

毫无疑问,这是不正常的。于是我尝试了很多,谷歌了很多,甚至去研究通过其他的方式去实现,比如代码方式实现布局

代码自定义布局嘛,需要去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。。。。。

image.png

特此记录,2017.7.31

参考:http://blog.csdn.net/zhcswlp0625/article/details/55211904

天坑都是出在细节上,注意细节,才是一个好程序员的第一步,也是节约时间成本的一个方法

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - 一次巨坑带来的收获 – PreferenceFragment


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.