2016-03-21 31 views
0

ben (muhtemelen TabHost kullanarak) sekmeleri ile bir Aktivite oluşturmak istiyorum oluştururken yardıma ihtiyacınız:şuna benzer özel bir TabHost

Wanted tabLayout

Bu düzen de, bazı düğmeler, onay ve bir GRIDVIEW var ama

Basic tabLayout

sorunum, ben hiçbir ipucu nasıl yapmak zorunda olmasıdır: varsayılan olarak onlar şuna benzer, çünkü benim sekmeler şuna benzer olurdu öğrenmek için çoğunlukla ilgileniyorum Daha önce bazı UI bileşenleri için çekilebilir yaptı, ama bu farklı bir şey olduğunu düşünüyorum.

cevap

1

Uzun bir süre sonra istediklerimi nasıl elde edeceğimi anladım, sekmeleri yapmak için birçok farklı yöntem denedim ve sonunda bir ViewPager ile bir TabLayout kullanarak sonuçlandım.

Ben Kavram Belgesi yaptık ve şuna benzer:

kimse kodunda ilgilenen varsa

enter image description here

, bu ana faaliyet düzenidir

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="10"> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="1dp" 
     android:layout_weight="0.2"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" 
     app:tabMode="fixed" 
     app:tabGravity="fill" 
     app:tabPaddingStart="2dp" 
     app:tabPaddingEnd="2dp" 
     app:tabPaddingTop="2dp"/> 

    <Button 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="5.8"/> 

</LinearLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
</LinearLayout> 

MainActivity.java:

import android.graphics.Color; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity implements FirstTabFragment.OnFragmentInteractionListener, SecondTabFragment.OnFragmentInteractionListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 

    tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT); 

    viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager())); 
    tabLayout.setupWithViewPager(viewPager); 

    TabLayout.Tab tab = tabLayout.getTabAt(0); 
    RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_layout_file1, tabLayout, false); 
    TextView tabTextView = (TextView) relativeLayout.findViewById(R.id.tab_title); 
    tabTextView.setText(tab.getText()); 
    tab.setCustomView(relativeLayout); 

    TabLayout.Tab tab2 = tabLayout.getTabAt(1); 
    RelativeLayout relativeLayout2 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_layout_file2, tabLayout, false); 
    TextView tabTextView2 = (TextView) relativeLayout2.findViewById(R.id.tab_title); 
    tabTextView2.setText(tab2.getText()); 
    tab2.setCustomView(relativeLayout2); 

    tab.select(); 

} 

@Override 
public void onFragmentInteraction(Uri uri) { 

} 

public class SectionPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return new FirstTabFragment(); 
      case 1: 
      default: 
       return new SecondTabFragment(); 
     } 
    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "First Tab"; 
      case 1: 
      default: 
       return "Second Tab"; 
     } 
    } 
} 
} 

TabLayout1 (TabL ayout2 aynıdır ancak shape2 kullanır)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TextView 
    android:id="@+id/tab_title" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:background="@drawable/shape1" 
    android:textColor="@android:color/white"/> 

</RelativeLayout> 

şekiller sadece kırmızı ve mavi dikdörtgen ve ve parçaları şekiller ile aynı renk arka plan ile varsayılan boş fragmanlar bulunmaktadır.