是否可以動態添加片段與LayoutParams?我有兩個片段,我想放在一個RelativeLayout中:一個應該鎖定在左邊。另一個應該鎖定在右邊。動態添加片段與LayoutParams
回答
您可能將它們分別包裹在佈局中(例如LinearLayout
),然後設置其大小和位置。 This answer是關於類似的問題,並顯示如何使用具有自定義佈局參數的FrameLayout
來包含Fragment
。
請注意,在XML中使用fragment
對象時,可以使用android:layout_*
屬性來控制其位置。像這樣:
<LinearLayout
android:orientation="horizontal"
... >
<fragment
android:layout_height="wrap_content"
android:layout_width="0px"
android:layout_weight="1"
... />
<fragment
android:layout_height="wrap_content"
android:layout_width="0px"
android:layout_weight="1"
... />
</LinearLayout>
不過,我不認爲這是可能的編程方式應用佈局參數Fragment
s。畢竟他們不是ViewGroup
。
這就是我害怕的。我希望這不是事實。多麼糟糕的API選擇。谷歌咆哮着沒有嵌套不需要的佈局,現在我不得不使用嵌套佈局定位碎片。嘆息...... – user123321
好吧,考慮一個'片段'和'活動'一樣。他們執行稍微不同的任務,但都不是佈局對象。它們都是爲單獨運行一部分流程而設計的。對我來說,這實際上是一個很好的設計決定;它使功能代碼與佈局代碼分開。 – Eric
我想我會嘗試在我的片段上使用setLayoutParams,然後在onCreateView中將自定義佈局參數添加到視圖中,然後再返回它。仍然可怕我需要一個「ID」的容器,不能使用參考....你殺了我厄爾古戈。 – user123321
我用下面的方法了ListFragment在LinearLayout中:
class CustomListFragment
extends ListFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
ViewGroup v = (ViewGroup) super.onCreateView(inflater, container,
savedInstanceState);
v.setLayoutParams(new LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.MATCH_PARENT, 1));
return v;
}
}
現在,我對對方的回答閱讀您的意見,我認爲這是類似於你算什麼。
但是請注意:框架可能會實例化您的片段。因此,這個類必須是公共的,並且必須有一個沒有任何進一步參數的構造函數。
因此,任何用於定製碎片的setter方法都不起作用,因爲它們不會被任何框架創建的實例調用。
這個作品!這些LayoutParams應用於包含框架視圖的視圖。 – babay
可以在onCreateView方法設置LayoutParameters您的片段的。 Befor將最終視圖返回爲此方法的返回值,您可以設置佈局參數。正如下面片段的樣品返回一個TextView作爲其搜索其中stucked到其父通過在其上設置的LayoutParams左:
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = "placeholder_text";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setGravity(Gravity.CENTER);
textView.setText(Integer.toString(getArguments().getInt(
ARG_SECTION_NUMBER)));
LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
textView.setLayoutParams(lp);
return textView;
}
}
對於特殊情況下,可以移動至層排序成在onStart()覆蓋
片段看起來是這樣的
公共類FragmentOne擴展片段{
private Client client;
public interface Client {
RelativeLayout.LayoutParams fetchFragmentOneParams(FragmentOne fragment);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity activity = getActivity();
try {
client = (Client) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement FragmentOne.Client");
}
}
@Override
public void onStart() {
super.onStart();
getView().setLayoutParams(client.fetchFragmentOneParams(this));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RelativeLayout view = new RelativeLayout(getActivity());
//
// code
//
return view;
}
- 1. 添加片段動態
- 2. Android - 動態添加片段
- 3. 使用LayoutParams動態添加視圖
- 4. 動態添加片段時出錯-java.lang.IllegalStateException:
- 5. 在片段中添加動態視圖
- 6. 清理動態添加的片段
- 7. 動態添加多個片段
- 8. 在片段中動態添加Edittext&Imagebutton
- 9. 將TableRows動態添加到片段
- 10. 動態地在片段中添加textview
- 11. 如何動態添加幾個片段
- 12. 在片段中動態添加視圖
- 13. 添加片段動態視圖
- 14. 動態地在另一個片段內添加一個片段
- 15. 將片段動態添加到其他片段的方法
- 16. 將片段動態添加到片段中
- 17. 動態片段
- 18. LayoutParams在切換片段後不更新
- 19. 添加LayoutParams時的ClassCastException
- 20. xCode動態添加字段
- 21. 動態添加字段
- 22. 動態創建並添加一個動畫片段到舞臺
- 23. 動態地添加多個片段到我的活動佈局
- 24. 在我的活動中動態添加片段
- 25. 動態添加動畫片段到舞臺as3
- 26. 我動態添加的動畫片段名稱爲「實例XX」
- 27. 將動畫片段的動態實例添加到數組
- 28. 片段中間(二):動態添加一個片段中的行Android
- 29. Android片段複製:無法替代靜態添加的片段
- 30. 在動態添加的元素中動態添加字段Jquery
你絕對需要一個'RelativeLayout'?這聽起來像是一個水平LinearLayout的工作...... – hwrdprkns
這是爲了簡單起見的一個例子。 – user123321