안 드 로 이 드 모방 위 챗 메 인 인터페이스 디자인

12666 단어 Android작은 편지
일단 효과 도 한 장.

1.Action Bar 의 디자인.
먼저 main.xml 입 니 다.이 메뉴 를 먼저 정의 하고 화면 은 나중에 조정 합 니 다.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
 tools:context=".MainActivity">

 <item
  android:id="@+id/action_search"
  android:actionViewClass="android.widget.SearchView"
  android:icon="@drawable/actionbar_search_icon"
  android:showAsAction="always|collapseActionView"
  android:title="@string/action_search"
  />
 <item
  android:id="@+id/action_add"
  android:actionProviderClass="develop.niuli.com.weixin.PlusActionProvider"
  android:icon="@drawable/actionbar_add_icon"
  android:showAsAction="always"
  android:title="@string/action_add"
  />
 <!--       .       menu -->
 <item
  android:id="@+id/action_btn01"
  android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
  android:orderInCategory="2"
  android:title="  "
  android:showAsAction="always">
 <menu>
 <item
   android:id="@+id/action_photo"
  android:icon="@drawable/ofm_photo_icon"
  android:title="@string/action_photo"
  android:showAsAction="never"
  />
 <item
  android:id="@+id/action_connection"
  android:icon="@drawable/ofm_collect_icon"
  android:title="@string/action_connection"
  android:showAsAction="never"
  />
 <item
  android:id="@+id/action_card"
  android:icon="@drawable/ofm_card_icon"
  android:title="@string/action_card"
  android:showAsAction="never"
  />
 <item
  android:id="@+id/action_settings"
  android:icon="@drawable/ofm_setting_icon"
  android:title="@string/action_settings"
  android:showAsAction="never"
   />
 <item
  android:id="@+id/action_feed"
  android:icon="@drawable/ofm_feedback_icon"
  android:title="@string/action_feed"
  android:showAsAction="never"
  />
 </menu>
</item>
</menu>

1.android:actionViewClass="android.widget.SearchView"호출 시스템 의 검색 표시 줄 스타일,
2.android:showAsAction="always|collapse Action View"는 Action Bar 전 체 를 가득 채 울 수 있 도록 합 니 다.이렇게 하면 위 챗 의 효 과 를 모방 할 수 있 습 니 다.
3.또한 overflow 에 있 는 아이콘+title 효 과 는 하나의 item 을 사용자 정의 하여 하나의 menu 를 감 싸 야 합 니 다.그러면 코드 없 이 아이콘+title 효 과 를 실현 할 수 있 습 니 다.
4.android:actionProvider Class="develop.niuli.com.weixin.PlusAction Provider"라 는 Action Provider 는 다른 메뉴 를 사용자 정의 하여 추가 기능 을 수행 하 는 것 과 같 으 며,PlusAction Provider 는 자신 이 단독으로 쓴 클래스 입 니 다.

/**
 *         +      
 */
public class PlusActionProvider extends ActionProvider {

 private Context context;
 public PlusActionProvider(Context context) {
  super(context);
  this.context = context;
 }

 @Override
 public View onCreateActionView() {
  return null;
 }

 @Override
 public void onPrepareSubMenu(SubMenu subMenu) {
  //        
  subMenu.clear();
  //          ,        
  subMenu.add(context.getString(R.string.plus_group_chat))
    .setIcon(R.drawable.ofm_group_chat_icon)
    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
     @Override
     public boolean onMenuItemClick(MenuItem item) {
      return false;
     }
    });
  //          
  subMenu.add(context.getString(R.string.plus_add_friend))
    .setIcon(R.drawable.ofm_add_icon)
    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
     @Override
     public boolean onMenuItemClick(MenuItem item) {
      return false;
     }
    });
  subMenu.add(context.getString(R.string.plus_video_chat))
    .setIcon(R.drawable.ofm_video_icon)
    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
     @Override
     public boolean onMenuItemClick(MenuItem item) {
      return false;
     }
    });
  subMenu.add(context.getString(R.string.plus_scan))
    .setIcon(R.drawable.ofm_qrcode_icon)
    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
     @Override
     public boolean onMenuItemClick(MenuItem item) {
      return false;
     }
    });
  subMenu.add(context.getString(R.string.plus_take_photo))
    .setIcon(R.drawable.ofm_camera_icon)
    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
     @Override
     public boolean onMenuItemClick(MenuItem item) {
      return false;
     }
    });
 }

 @Override
 public boolean hasSubMenu() {
  return true;
 }
}

이러한 Action Bar 는 기본적으로 우리 가 원 하 는 기능 을 실 현 했 고 나머지 는 스타일 이 다 르 기 때문에 Style.xml 파일 을 수정 합 니 다.AS 에 도 테마 편집기 가 있 습 니 다.아직 사용 하지 않 았 습 니 다.후기 시도.

<resources>

 <!--                ,        -->
 <style name="App_Theme" parent="@android:style/Theme.Holo.Light">
  <!-- Customize your theme here. -->
  <item name="android:actionBarStyle">@style/wexinActionBar</item>
  <item name="android:itemBackground">@drawable/actionbar_bg_selector</item>
  <item name="android:actionBarItemBackground">@drawable/actionbar_bg_selector</item>
  <item name="android:itemTextAppearance">@style/WeChatActionBarTitleText</item>
  <item name="android:actionOverflowButtonStyle">@style/WeChatActionButtonOverflow</item>
 </style>

 <style name="wexinActionBar" parent="@android:style/Widget.Holo.ActionBar">
  <item name="android:background">#303537</item>
  <item name="android:titleTextStyle">@style/WeChatActionBarTitleText</item>
 </style>
 <style name="WeChatActionBarTitleText" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
  <item name="android:textColor">#cfcfcf</item>
  <item name="android:textSize">17sp</item>
 </style>

 <style name="WeChatActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
  <item name="android:src">@drawable/actionbar_more_icon</item>
 </style>
</resources>

2.메 인 인터페이스의 디자인
PagerSlidingTabStrip+viewpager 를 사용 하면 둘 이 자동 으로 어 울 려 서 사용 하기에 편리 합 니 다.
mainactivity.xml 설정

<RelativeLayout 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"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 tools:context=".MainActivity">
 <!--     ActionBar   tabs     -->
 <com.astuetz.PagerSlidingTabStrip
  android:id="@+id/tabs"
  android:layout_width="match_parent"
  app:pstsShouldExpand="true"
  android:layout_height="40dp"/>
 <android.support.v4.view.ViewPager
  android:id="@+id/pagers"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_below="@+id/tabs"
  />
</RelativeLayout>
그리고 세 개의 fragment 레이아웃 을 만들어 view pager 에 넣 고 다음 예 를 들 어 보 겠 습 니 다.

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

 <TextView
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:text="    "
  android:gravity="center"
  android:textSize="20sp"
  />

</FrameLayout>


public class ChatFragment extends android.support.v4.app.Fragment {


 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.chatfragment_layout,container,false);
  return view;
 }
}

다음은 MainActivity.java 에서 코드 설정 입 니 다.

/**
  * tabs    
  */
 private PagerSlidingTabStrip tabs;

 /**
  *          
  */
 private DisplayMetrics dm;

 /**
  *     viewpager
  */
 private ViewPager pagers;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  setOverflowShowingAlways();
  dm = getResources().getDisplayMetrics();
  pagers = (ViewPager) findViewById(R.id.pagers);
  tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
  //      FragmentActivity        
  pagers.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
  tabs.setViewPager(pagers);
  setTabValue();
 }

 /**
  *  PagerSlidingTabStrip     
  */
 private void setTabValue(){
//  //  tabs         ,xml        
//  tabs.setShouldExpand(true);
  //  tabs      
  tabs.setDividerColor(Color.TRANSPARENT);
  //  tabs      
  //TypedValue      
  tabs.setUnderlineHeight((int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 1, dm));
  //   Tab Indicator   
  tabs.setIndicatorHeight((int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 4, dm));
  //   Tab       
  tabs.setTextSize((int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_SP, 16, dm));
  //   Tab Indicator   
  tabs.setIndicatorColor(Color.parseColor("#45c01a"));
  //     Tab      (           )
//  tabs.setSelectedTextColor(Color.parseColor("#45c01a"));
  //     Tab     
  tabs.setTabBackground(0);
 }
view pager 는 페이지 를 설정 하기 위해 Adapter 가 필요 하고 tabs 는 view pager 를 설정 해 야 한 다 는 것 을 알 수 있 습 니 다.그러면 세 가 지 는 완벽 하 게 적응 할 수 있 습 니 다.

public class ViewPagerAdapter extends FragmentPagerAdapter {

 /**
  *     
  */
 private ChatFragment chatFragment;
 /**
  *     
  */
 private FoungFragment foundFragment;
 /**
  *     
  */
 private ContactFragment contactFragment;

 private final String[] titles = { "  ", "  ", "   " };

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

 @Override
 public Fragment getItem(int position) {
  switch (position) {
   case 0:
    if (chatFragment == null) {
     chatFragment = new ChatFragment();
    }
    return chatFragment;
   case 1:
    if (foundFragment == null) {
     foundFragment = new FoungFragment();
    }
    return foundFragment;
   case 2:
    if (contactFragment == null) {
     contactFragment = new ContactFragment();
    }
    return contactFragment;
   default:
    return null;
  }
 }

 @Override
 public int getCount() {
  return titles.length;
 }

 @Override
 public CharSequence getPageTitle(int position) {
  return titles[position];
 }
}
본 고 는 이미《Android 위 챗 개발 튜 토리 얼 집계》로 정리 되 었 으 니,여러분 의 학습 과 독 서 를 환영 합 니 다.
이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기