2016-09-02 13 views
0

タブのフラグメントのレイアウトをナビゲーションビューのアプリケーションバーの下部に合わせる必要があるアンドロイドアプリを実行しています。問題は、imageViewが(アンドロイド:layout_alignBottom = "@ id/appbar"ではなく)アプリケーションバーの上に表示され、adittionでScrollViewが機能しないことです。断片FastAccessFragmentに私は3つのタブでの作成、Android align bottomが正しく動作しない

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/content_main_d" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/app_bar_main"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar_fragment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 


</RelativeLayout> 

その後:content_mainレイアウトは次のコードを持っている

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    Fragment currFragment = null; 
    FragmentManager fragmentManager = getSupportFragmentManager(); 

    if (id == R.id.nav_principal) { 
     currFragment = new FastAccessFragment(); 
    } else if (id == R.id.nav_logout) { 
     editor.putBoolean("signedUp", false); 
     editor.apply(); 
     Intent intent = new Intent(this, LoginActivity.class); 
     if (intent != null) { 
      this.finish(); 
      startActivity(intent); 
     } 
    } 

    if (currFragment != null) { 
     fragmentManager 
       .beginTransaction() 
       .replace(R.id.content_main, currFragment) 
       .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
       .commit(); 
    } 

    setTitle(item.getTitle()); 

は、私は次のコードを持ってナビゲーションビューを持っていますここに表示される対応するタブ:

public class FastAccessFragment extends Fragment { 

    private ViewPager viewPager; 
    private AppBarLayout appBar; 
    View rootview; 
    TabLayout tabLayout; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     rootview = inflater.inflate(R.layout.fast_access_fragment, container, false); 

     if (savedInstanceState == null) { 

      View parent = (View) container.getParent(); 
      appBar = (AppBarLayout) parent.findViewById(R.id.appbar); 
      tabLayout = new TabLayout(getActivity()); 
      tabLayout.setTabTextColors(Color.parseColor("#C0C0C0"), Color.parseColor("#FFFFFF")); 
      tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFA500")); 
      appBar.addView(tabLayout); 

      viewPager = (ViewPager) rootview.findViewById(R.id.pager_fragment); 

      Adapter adapter = new Adapter(getFragmentManager()); 

      adapter.addFragment(new VoiceFragment(), "Voice"); 
      adapter.addFragment(new ButtonsFragment(), "Buttons"); 
      adapter.addFragment(new PicturesFragment(), "Pictures"); 

      viewPager.setAdapter(adapter); 

      tabLayout.setupWithViewPager(viewPager); 

      tabLayout.getTabAt(0).setIcon(R.drawable.microphone); 
      tabLayout.getTabAt(1).setIcon(R.drawable.hand_up); 
      tabLayout.getTabAt(2).setIcon(R.drawable.frame); 
     } 

     return rootview; 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
     appBar.removeView(tabLayout); 
    } 

    public class Adapter extends FragmentStatePagerAdapter { 
     private final List<Fragment> fragments = new ArrayList<>(); 
     private final List<String> fragmentTitles = new ArrayList<>(); 

     public Adapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public android.support.v4.app.Fragment getItem(int position) { 
      return fragments.get(position); 
     } 

     @Override 
     public int getCount() { 
      return fragments.size(); 
     } 

     public void addFragment(android.support.v4.app.Fragment fragment, String title) { 
      fragments.add(fragment); 
      fragmentTitles.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return fragmentTitles.get(position); 
     } 
    } 

} 

The But

public class ButtonsFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_buttons, container, false); 

     Button up = (Button) view.findViewById(R.id.up_button); 
     Button up_2 = (Button) view.findViewById(R.id.up_button_2); 
     Button up_3 = (Button) view.findViewById(R.id.up_button_3); 
     Button up_4 = (Button) view.findViewById(R.id.up_button_4); 
     Button up_5 = (Button) view.findViewById(R.id.up_button_5); 

     final ImageView im = (ImageView) view.findViewById(R.id.blind_image); 

     up.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       im.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.blind0, null)); 
      } 
     }); 

     up_2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       im.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.blind1, null)); 
      } 
     }); 

     up_3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       im.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.blind2, null)); 
      } 
     }); 

     up_4.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       im.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.blind3, null)); 
      } 
     }); 

     up_5.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       im.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.blind4, null)); 
      } 
     }); 

     return view; 
    } 
} 

そして最後に、私はレイアウトfragment_buttonsを持っScrollViewとalignBottomは動作しません:enter image description here

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignBottom="@id/appbar" 
    tools:context="com.blindsiot.carlos.blindsiot.VoiceFragment"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <ImageView 
       android:layout_width="200dp" 
       android:layout_height="200dp" 
       android:id="@+id/blind_image" 
       android:layout_gravity="center" 
       android:src="@drawable/blind0" /> 

      <Button 
       android:id="@+id/up_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       style="@style/Widget.AppCompat.Button.Colored" 
       android:text="PRUEBA"/> 

      <Button 
       android:id="@+id/up_button_2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       style="@style/Widget.AppCompat.Button.Colored" 
       android:text="PRUEBA"/> 

      <Button 
       android:id="@+id/up_button_3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       style="@style/Widget.AppCompat.Button.Colored" 
       android:text="PRUEBA"/> 

      <Button 
       android:id="@+id/up_button_4" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       style="@style/Widget.AppCompat.Button.Colored" 
       android:text="PRUEBA"/> 

      <Button 
       android:id="@+id/up_button_5" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       style="@style/Widget.AppCompat.Button.Colored" 
       android:text="PRUEBA"/> 

     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

はあなたがここに結果を見ることができるtonsFragmentは、次のコードを持っていますそして、期待される結果は、ボタンの同じレイアウト内のアプリケーションバーの上の画像ビューと、それらのすべてがスクロールビューで表示されることになります。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

アプリバーが含まれているapp_bar_mainレイアウトのコードは以下の通りである:

ポケットベルに対応し、それはFastAccessFragmentを膨張レイアウトは、このコードがある

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.blindsiot.carlos.blindsiot.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <RelativeLayout 
     android:id="@+id/content_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</android.support.design.widget.CoordinatorLayout> 

答えて

0

VoicePicturesの部分は見た目がいいですか?私はあなたの問題が断片レイアウト自体に(唯一の)問題ではないと思います。

1レベル上のレイアウト(ViewPagerAppBarを持つレイアウト)を共有できますか?問題があなたのViewPager制約にあると思われます。それはandroid:layout_alignBottom="@id/appbar"を持っているはずのViewPagerですが、私がレイアウトを見るまでは確かに言えません。

兄弟要素であるandroid:layout_alignBottomを使用することができますが、これはそうではありません。フラグメントがViewPagerの中にあることは明らかです(フラグメントによって作成されるラッパービューはもちろんありません)。

+0

私はコードで質問を編集しています。コードの2番目のセクションと最後の2つのセクションでは、あなたがコメントしたものを見ることができます。 – user3748883

+1

さて、 'AppBar'の下にある' RelativeLayout'は 'app:layout_behavior =" @ string/appbar_scrolling_view_behavior "'を持つ必要があります。 –

+0

それはまさにそれでしたが、私はこの仕事の論理を理解していません。それを知る前にこの属性を知る方法? – user3748883

0

をあなた親LinearLayoutの向きを定義していない

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_alignBottom="@id/appbar" 
    tools:context="com.blindsiot.carlos.blindsiot.VoiceFragment"> 

そして、ScrollView内のLinearLayoutの高さをmatch_parentとして設定してください。

+0

これはまったく同じ結果をスローします... – user3748883

関連する問題