0

林查看試圖使用getLayoutParams()以片段的視圖對齊到視圖在其父AppCompatActivity對齊觀片段在父母AppCompatActivity

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewImAligning.getLayoutParams(); 
     params.addRule(RelativeLayout.BELOW, R.id.video_view_from_appCompat); 
     viewImAligning.setLayoutParams(params); 

林的片段初始化R.id.video_view_from_appCompat正確的,因爲我可以從Fragment的setUserVisibleHint方法得到它的寬度/高度等。 但是我不能讓viewImAligning對齊到video_view_from_appCompat無論身在何處片段的生命週期,我把viewImAligning.setLayoutParams(params);

對於雖然哈克解決方法是卓有成效的,現在我使用的getLocationsOnScreen

 int [] generatedLocations = new int[2]; 
     locations = generatedLocations; 

     videoViewFromAppCompat.getLocationOnScreen(locations); 
     int x = locations[0]; 
     int y = locations[1]; 
     viewImAligning.setY(y); 

哈克解決方法,我想知道爲什麼我沒有得到getLayoutParams的工作。

編輯:代碼和XML(的麪條代碼位包括AsyncTask櫃面說有什麼用它做

public abstract class VideoIntro extends AppCompatActivity{ 

private LinearLayout videoViewFromAppCompat; 

@Override 
final protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.video_intro_layout_test); 
    new LoadContestTask().execute(); 

} 

private class LoadContestTask extends AsyncTask<Object, Object, Object> { 
    ProgressDialog pDialog; 

    @Override 
    protected void onPreExecute() { 
    ... 

    } 

    @Override 
    protected Object doInBackground(Object... params) { 
     initialize(); 
     return true; 
    } 

    protected void onPostExecute(Object result) { 
     loadContent(); 
     pDialog.dismiss(); 
    } 
} 

    private void initialize() { 
    ... 
    videoViewFromAppCompat = (LinearLayout) findViewById(video_view_from_appCompat); 
} 
... 
} 

XML爲video_intro_layout_test

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
> 
<SurfaceView 
    android:layout_width="0px" 
    android:layout_height="0px" /> 
<LinearLayout 
    android:id="@+id/video_view_from_appCompat" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/top" 
    android:paddingLeft="45dp" 
    android:paddingRight="45dp" 
    android:paddingTop="36dp" 
    android:visibility="invisible"> 
<VideoView 
    android:id="@+id/video" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

<com.my_test.app.CustomViewPager 
    android:id="@+id/view_pager" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
</com.my_test.app.CustomViewPager> 

片段的代碼

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    videoViewFromAppCompat = (LinearLayout) getActivity().findViewById(R.id.video_view_from_appCompat); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_layout, container, false); 
    viewImAligning = (RelativeLayout) v.findViewById(R.id.view_im_aligning); 

} 

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) 
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewImAligning.getLayoutParams(); 
    params.addRule(RelativeLayout.BELOW, R.id.video_view_from_appCompat); 
    viewImAligning.setLayoutParams(params); 
+0

你可以分享你的XML或代碼中定義和有關添加viewImAligning其他意見,特別是它的父? –

+0

請發佈您的XML以及活動代碼。 – xaxist

+0

@ DoronYakovlev-Golani更新的問題與代碼 - 謝謝 – user1446988

回答

1

我想我已經明白了,你正試圖調整一個視圖h是FragmentR.id.view_im_aligning)到RelativeLayout內的視圖(R.id.video_view_from_appCompat)的基本視圖,該視圖屬於您的Activity。問題是它們不共享相同的父代,並且導致代碼失敗。

我建議如下 - 如果你需要一個專門的片段出現在你的video_view_from_appCompat下面,添加FrameLayout來包含片段添加片段到該視圖。之後,您可以將FrameLayout對齊到video_view_from_appCompat下方。

所以您的XML看起來有點像:

<RelativeLayout ...> 
    ... 
    <LinearLayout 
     android:id="@+id/video_view_from_appCompat" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/top" 
     android:paddingLeft="45dp" 
     android:paddingRight="45dp" 
     android:paddingTop="36dp" 
     android:visibility="invisible"> 
    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/video_view_from_appCompat"/> 
    ... 
</RelativeLayout> 
+0

經過多次調整你的答案帶領我在正確的方向。我把'CustomViewPager'放在'fragment_container'裏面,它保存着動態片段,並且工作正常。非常感謝您的時間。 – user1446988