实训第四周(1)

李晨晨:

本周我主要想实现发送图片的功能,这次我先实现了图片选择界面的相关功能,主要有图片展示用的RecycleViewAdapter和对应的RViewHolder。参考博文地址:https://blog.csdn.net/u014628886/article/details/52184027

构造一个比较完整的Adapter至少需要完成以下三件事情:

1.onCreateViewHolder通过视图id加载不同Item视图并生成ViewHolder用来保存每个列表Item视图。

2.onBindViewHolder更新列表Item视图(填充model数据)

3.新建ViewHolder类来存储Item视图及其子视图

[java]  view plain  copy
  1. public abstract class RecycleViewAdapter<T> extends RecyclerView.Adapter<RViewHolder> {  
  2.   
  3.     private Context mContext;  
  4.     private List<T> mList;  
  5.     private LayoutInflater mInflater;  
  6.     private OnItemClickListener mClickListener;  
  7.     public RecycleViewAdapter(Context context, List<T> data){  
  8.         this.mContext = context;  
  9.         this.mList = data;  
  10.         mInflater = LayoutInflater.from(mContext);  
  11.     }  
  12.   
  13.     @Override  
  14.     public RViewHolder onCreateViewHolder(ViewGroup parent, int itemLayout) {  
  15.         View view = mInflater.inflate(itemLayout, parent, false);  
  16.         return new RViewHolder(mContext,view);  
  17.     }  
  18.   
  19.     @Override  
  20.     public void onBindViewHolder(final RViewHolder holder, int position) {  
  21.         View view = holder.getConvertView();  
  22.         view.setOnClickListener(new View.OnClickListener() {  
  23.             @Override  
  24.             public void onClick(View v) {  
  25.                 if (mClickListener != null){  
  26.                     mClickListener.onItemClick(holder,holder.getAdapterPosition());  
  27.                 }  
  28.             }  
  29.         });  
  30.         bindView(holder,position);  
  31.     }  
  32.   
  33.     @Override  
  34.     public int getItemViewType(int position) {  
  35.         return this.setItemLayoutId(position);  
  36.     }  
  37.   
  38.     @Override  
  39.     public int getItemCount() {  
  40.         return mList == null ? 0 : mList.size();  
  41.     }  
  42.   
  43.   
  44.     /** 
  45.      * set item layout id 
  46.      * @param position item'position in list 
  47.      * @return layout id 
  48.      */  
  49.     public abstract int setItemLayoutId(int position);  
  50.   
  51.     /** 
  52.      * bind view by holder 
  53.      * @param holder view holder 
  54.      * @param position position in data list 
  55.      */  
  56.     public abstract void bindView(RViewHolder holder, int position);  
  57.   
  58.   
  59.     public void setItemClickListener(OnItemClickListener clickListener){  
  60.         this.mClickListener = clickListener;  
  61.     }  
  62. }  

对应Item的点击事件,需要在onBindViewHolder中适当绑定点击事件。具体的实现要在使用该Adapter的activity中为adapter设置点击监听器。

[java]  view plain  copy
  1. view.setOnClickListener(new View.OnClickListener() {  
  2.             @Override  
  3.             public void onClick(View v) {  
  4.                 if (mClickListener != null){  
  5.                     mClickListener.onItemClick(holder,holder.getAdapterPosition());  
  6.                 }  
  7.             }  

对应的RviewHolder:

[java]  view plain  copy
  1. public class RViewHolder extends RecyclerView.ViewHolder{  
  2.     private SparseArray<View> mViews;  
  3.     private View mConvertView;  
  4.     private Context mContext;  
  5.   
  6.     public RViewHolder(Context context, View itemView) {  
  7.         super(itemView);  
  8.         mContext = context;  
  9.         mConvertView = itemView;  
  10.         mViews = new SparseArray<>();  
  11.     }  
  12.   
  13.     private <T extends View> T getView(int viewId) {  
  14.         View view = mViews.get(viewId);  
  15.         if (view == null) {  
  16.             view = mConvertView.findViewById(viewId);  
  17.             mViews.put(viewId, view);  
  18.         }  
  19.         return (T) view;  
  20.     }  
  21.   
  22.     public View getConvertView() {  
  23.         return mConvertView;  
  24.     }  
  25.   
  26.     public ImageView getImageView(int viewId){  
  27.         return getView(viewId);  
  28.     }  
  29.   
  30.     public void setText(int viewId, String text) {  
  31.         TextView tv = getView(viewId);  
  32.         tv.setText(text);  
  33.     }  
  34.     public void setVisible(int viewId, boolean visible) {  
  35.         View view = getView(viewId);  
  36.         view.setVisibility(visible ? View.VISIBLE : View.GONE);  
  37.     }  
  38.     public void setOnClickListener(int viewId, View.OnClickListener listener) {  
  39.         View view = getView(viewId);  
  40.         view.setOnClickListener(listener);  
  41.     }  
  42. }  



仝心:

 这几天我继续完成了表情包的相关使用的编程部分,包括自定义一个继承自LinearLayout的表情选择指示器IndicatorView类用于表情页面切换。主要方法是init(count)方法,其中传入的count参数是表情包页数,页数的计算在另外的Java文件中实现。

[java]  view plain  copy
  1. public void init(int count) {  
  2.   
  3.         mImageViews = new ArrayList<>();  
  4.         this.removeAllViews();  
  5.         for (int i = 0; i < count; i++) {  
  6.             RelativeLayout rl = new RelativeLayout(mContext);  
  7.             LayoutParams params = new LayoutParams(mMaxWidth, mMaxHeight);  
  8.             RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(  
  9.                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  10.             layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);  
  11.             ImageView imageView = new ImageView(mContext);  
  12.             if (i == 0) {  
  13.                 imageView.setImageBitmap(mBtnSelect);  
  14.                 rl.addView(imageView, layoutParams);  
  15.             } else {  
  16.                 imageView.setImageBitmap(mBtnNormal);  
  17.                 rl.addView(imageView, layoutParams);  
  18.             }  
  19.             this.addView(rl, params);  
  20.             mImageViews.add(imageView);  
  21.         }  
  22.     }  

在EmojiLayout中完成表情页面的布局操作,包括表情页初始化,页面指示器等的初始化等等

[java]  view plain  copy
  1. private ViewPager mViewPager;  
  2.     private IndicatorView mIndicatorView;  
  3.     private List<EmojiBean> mEmojiBeans;  
  4.     private List<View> mViewPageItems;  
  5.     private static final int COLUMNS = 7;  
  6.     private static final int ROWS = 3;  
  7.     private OnEmojiSelectListener mSelectListener;  
[java]  view plain  copy
  1. private void initView(){  
  2.         // 根据表情数量计算表情页数  
  3.         int pagerCount = getPagerCount(mEmojiBeans.size());  
  4.         // 页面指示器初始化  
  5.         mIndicatorView.init(pagerCount);  
  6.         // 表情页初始化  
  7.         mViewPageItems = new ArrayList<>();  
  8.         for (int i = 0;i<pagerCount;i++){  
  9.             mViewPageItems.add(createViewPage(i * COLUMNS * ROWS));  
  10.         }  
  11.         ViewPageAdapter adapter = new ViewPageAdapter(mViewPageItems);  
  12.         mViewPager.setAdapter(adapter);  
  13.   
  14.         // 根据页面切换,更新指示器  
  15.         mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {  
  16.             int oldPosition = 0;  
  17.   
  18.             @Override  
  19.             public void onPageScrolled(int position, float positionOffset,  
  20.                                        int positionOffsetPixels) {  
  21.   
  22.             }  
  23.   
  24.             @Override  
  25.             public void onPageSelected(int position) {  
  26.                 mIndicatorView.playBy(oldPosition,position);  
  27.                 oldPosition = position;  
  28.             }  
  29.   
  30.             @Override  
  31.             public void onPageScrollStateChanged(int state) {  
  32.   
  33.             }  
  34.         });  
  35.     }  

创造表情页面的方法,使用GridView宫格布局,三行七列排布

[java]  view plain  copy
  1. private View createViewPage(int offset){  
  2.         View view = LayoutInflater.from(getContext())  
  3.                 .inflate(R.layout.layout_grid_view, nullfalse);  
  4.         GridView gridView = (GridView) view.findViewById(R.id.grid_view);  
  5.         int toIndex = offset + ROWS * COLUMNS;  
  6.         if (toIndex > mEmojiBeans.size() - 1) {  
  7.             toIndex = mEmojiBeans.size() - 1;  
  8.         }  
  9.   
  10.         final List<EmojiBean> currentList = mEmojiBeans.subList(offset, toIndex);  
  11.   
  12.         gridView.setAdapter(new GridViewAdapter(getContext(),currentList));  
  13.         gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
  14.             @Override  
  15.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  16.                 if (mSelectListener != null){  
  17.                     if (position == parent.getAdapter().getCount() -1){  
  18.                         mSelectListener.emojiDelete();  
  19.                     }else {  
  20.                         mSelectListener.emojiSelect(currentList.get(position));  
  21.                     }  
  22.                 }  
  23.             }  
  24.         });  
  25.         return gridView;  
  26.     }  



张静:

本周开始写第二个自定义的Fragment, ContractFragment。对应界面中的“通讯录”。里面实现的功能有添加朋友,验证提醒,好友列表显示。

1. 设置加载的布局ID以及“通讯录”布局文件

[java]  view plain  copy
  1. @Override  
  2.    public int setLayoutID() {  
  3.        return R.layout.fragment_contract;  
  4.    }  

fragment_contract.xml

[java]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  7.     android:orientation="vertical"  
  8.     android:background="@color/interval_color">  
  9.   
  10.     <RelativeLayout  
  11.         android:background="@color/white_color"  
  12.         android:id="@+id/layout_add_friend"  
  13.         android:layout_width="match_parent"  
  14.         android:layout_height="50dp"  
  15.         android:paddingLeft="10dp"  
  16.         android:paddingRight="10dp">  
  17.   
  18.         <ImageView  
  19.             android:id="@+id/iv_add_friend"  
  20.             android:layout_width="50dp"  
  21.             android:layout_height="50dp"  
  22.             android:padding="5dp"  
  23.             android:scaleType="fitXY"  
  24.             android:src="@mipmap/add_friend"/>  
  25.   
  26.         <TextView  
  27.             android:layout_toRightOf="@+id/iv_add_friend"  
  28.             android:layout_width="wrap_content"  
  29.             android:layout_height="match_parent"  
  30.             android:text="@string/add_friend"  
  31.             android:textSize="16sp"  
  32.             android:textColor="@color/app_black_color"  
  33.             android:layout_marginLeft="5dp"  
  34.             android:gravity="center"/>  
  35.         <View  
  36.             android:layout_alignParentBottom="true"  
  37.             android:layout_width="match_parent"  
  38.             android:layout_height="0.8dp"  
  39.             android:background="@color/interval_color"/>  
  40.     </RelativeLayout>  
  41.     <RelativeLayout  
  42.         android:background="@color/white_color"  
  43.         android:id="@+id/layout_msg_notify"  
  44.         android:layout_width="match_parent"  
  45.         android:layout_height="50dp"  
  46.         android:paddingLeft="10dp"  
  47.         android:paddingRight="10dp">  
  48.   
  49.         <ImageView  
  50.             android:id="@+id/iv_msg_notify"  
  51.             android:layout_width="50dp"  
  52.             android:layout_height="50dp"  
  53.             android:padding="5dp"  
  54.             android:scaleType="fitXY"  
  55.             android:src="@mipmap/msg_notify"/>  
  56.   
  57.         <TextView  
  58.             android:id="@+id/tv_alarm"  
  59.             android:layout_toRightOf="@+id/iv_msg_notify"  
  60.             android:layout_width="wrap_content"  
  61.             android:layout_height="match_parent"  
  62.             android:text="@string/msg_notify"  
  63.             android:textSize="16sp"  
  64.             android:textColor="@color/app_black_color"  
  65.             android:layout_marginLeft="5dp"  
  66.             android:gravity="center"/>  
  67.           
  68.         <View  
  69.             android:layout_alignParentBottom="true"  
  70.             android:layout_width="match_parent"  
  71.             android:layout_height="0.8dp"  
  72.             android:background="@color/interval_color"/>  
  73.     </RelativeLayout>  
  74.   
  75.   
  76.     <android.support.v7.widget.RecyclerView  
  77.         android:layout_marginTop="10dp"  
  78.         android:background="@color/white_color"  
  79.         android:id="@+id/rcv_friend"  
  80.         android:layout_width="match_parent"  
  81.         android:layout_height="0dp"  
  82.         android:layout_weight="1"  
  83.         android:paddingLeft="10dp"  
  84.         android:paddingRight="10dp"/>  
  85.   
  86. </LinearLayout>  


2.初始化

验证提醒下方的空白处即好友列表,列表的每一项显示该好友头像和昵称(bindView)

点击某一项(setItemClickListener)会跳转进入该好友信息(FriendInfoActivity)

设置好友列表更新监听,加载好友列表(loadFriendList)

[java]  view plain  copy
  1. @Override  
  2.     public void initView(View rootView) {  
  3.         ButterKnife.bind(this, rootView);  
  4.         mFriendList = new ArrayList<>();  
  5.         mViewAdapter = new RecycleViewAdapter<NimUserInfo>(getContext(), mFriendList) {  
  6.             @Override  
  7.             public int setItemLayoutId(int position) {  
  8.                 return R.layout.item_friend;  
  9.             }  
  10.   
  11.             @Override  
  12.             public void bindView(RViewHolder holder, int position) {  
  13.                 NimUserInfo item = mFriendList.get(position);  
  14.                 holder.setImageByUrl(getContext(), R.id.iv_head_picture,  
  15.                         item.getAvatar(), R.mipmap.bg_img_defalut);  
  16.                 holder.setText(R.id.tv_friend_nick, item.getName());  
  17.             }  
  18.         };  
  19.         mViewAdapter.setItemClickListener(new OnItemClickListener() {  
  20.             @Override  
  21.             public void onItemClick(RViewHolder holder, int position) {  
  22.                 Intent intent = new Intent(getContext(), FriendInfoActivity.class);//创建intent对象,参数分别为上下文,要跳转的Activity类(朋友详细资料)  
  23.                 //将要传递的值附加到Intent对象  
  24.                 intent.putExtra("NimUserInfo", mFriendList.get(position)); //(键, 值)  
  25.                 intent.putExtra("FLAG", FriendInfoActivity.FLAG_SHOW_FRIEND);  
  26.                 //启动该Intent对象,实现跳转  
  27.                 startActivity(intent);  
  28.             }  
  29.         });  
  30.   
  31.         mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));  
  32.         mRecyclerView.setAdapter(mViewAdapter);  
  33.   
  34.         NimFriendHandler.getInstance().setUpdateListener(new OnFriendUpdateListener() {  
  35.             @Override  
  36.             public void friendUpdate() {  
  37.                 loadFriendList();  
  38.             }  
  39.         });  
  40.   
  41.         loadFriendList();  
  42.   
  43.     }  

3. FriendInfoActivity.java     好友信息(当点击好友列表一项时,进入对应的好友信息)(initView中用到)

(1)会显示头像,app名字(聊天工具),账号

    可选择添加到通讯录,发送信息,视频聊天

(2)根据预先设置的FLAG选择所要显示的下方TextView

    a. flag == FLAG_ADD_FRIEND

        只显示“添加到通讯录”

    b. flag == FLAG_SHOW_FRIEND

        显示“发送信息”,“视频聊天”

    c. flag == FLAG_PURE_SHOW_FRIEND

        都不显示

   initView中选择b

(3) 若点击了“添加到通讯录”,跳转到RequestFriendActivity

(4) 若点击了“发送信息”,跳转到P2PChatActivity

(5)可选择回退

[java]  view plain  copy
  1. package com.ezreal.ezchat.activity;  
  2.   
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.support.annotation.Nullable;  
  6. import android.view.View;  
  7. import android.widget.ImageView;  
  8. import android.widget.TextView;  
  9.   
  10. import com.ezreal.ezchat.R;  
  11. import com.joooonho.SelectableRoundedImageView;  
  12. import com.netease.nimlib.sdk.uinfo.constant.GenderEnum;  
  13. import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;  
  14. import com.ezreal.ezchat.commonlibrary.utils.ImageUtils;  
  15.   
  16. import java.util.Map;  
  17.   
  18. import butterknife.BindView;  
  19. import butterknife.ButterKnife;  
  20. import butterknife.OnClick;  
  21.   
  22. /** 
  23.  * Created by 张静 
  24.  */  
  25.   
  26. public class FriendInfoActivity extends BaseActivity {  
  27.   
  28.     public static final int FLAG_ADD_FRIEND = 10001;  
  29.     public static final int FLAG_SHOW_FRIEND = 10002;  
  30.     public static final int FLAG_PURE_SHOW_FRIEND=10003;  
  31.   
  32.     @BindView(R.id.iv_head_picture)  
  33.     SelectableRoundedImageView mHeadImg;  
  34.     @BindView(R.id.iv_person_sex)  
  35.     ImageView mIvPersonSex;  
  36.     @BindView(R.id.tv_remark)  
  37.     TextView mTvRemark;  
  38.     @BindView(R.id.tv_account)  
  39.     TextView mTvAccount;  
  40.     @BindView(R.id.tv_nike)  
  41.     TextView mTvNike;  
  42.     @BindView(R.id.tv_add_to_contract)  
  43.     TextView mTvAdd2Contract;  
  44.     @BindView(R.id.tv_start_chat)  
  45.     TextView mTvStartChat;  
  46.     @BindView(R.id.tv_video_chat)  
  47.     TextView mTvVideoChat;  
  48.   
  49.     private NimUserInfo mNimUserInfo;  
  50.     @Override  
  51.     protected void onCreate(@Nullable Bundle savedInstanceState) {  
  52.         super.onCreate(savedInstanceState);  
  53.         setStatusBarColor(R.color.app_blue_color);  
  54.         setContentView(R.layout.activity_friend_info);  
  55.         setTitleBar("详细资料",true,true);  
  56.         ButterKnife.bind(this);  
  57.         bindViewByIntent();  
  58.     }  
  59.   
  60.   
  61.     private void bindViewByIntent(){  
  62.         Intent intent = getIntent();  
  63.         int flag = intent.getIntExtra("FLAG", FLAG_ADD_FRIEND);  
  64.         if ( flag == FLAG_ADD_FRIEND){  
  65.             mTvAdd2Contract.setVisibility(View.VISIBLE);  
  66.             mTvStartChat.setVisibility(View.GONE);  
  67.             mTvVideoChat.setVisibility(View.GONE);  
  68.         }else if (flag == FLAG_SHOW_FRIEND){  
  69.             mTvAdd2Contract.setVisibility(View.GONE);  
  70.             mTvStartChat.setVisibility(View.VISIBLE);  
  71.             mTvVideoChat.setVisibility(View.VISIBLE);  
  72.         }else if(flag==FLAG_PURE_SHOW_FRIEND){  
  73.             mTvAdd2Contract.setVisibility(View.GONE);  
  74.             mTvStartChat.setVisibility(View.GONE);  
  75.             mTvVideoChat.setVisibility(View.GONE);  
  76.         }  
  77.   
  78.         mNimUserInfo = (NimUserInfo) intent.getSerializableExtra("NimUserInfo");  
  79.         if (mNimUserInfo != null){  
  80.             ImageUtils.setImageByUrl(this,mHeadImg,mNimUserInfo.getAvatar(),R.mipmap.app_logo_main);  
  81.             if (mNimUserInfo.getGenderEnum() == GenderEnum.FEMALE){  
  82.                 mIvPersonSex.setImageResource(R.mipmap.ic_woman);  
  83.             }else if (mNimUserInfo.getGenderEnum() == GenderEnum.MALE){  
  84.                 mIvPersonSex.setImageResource(R.mipmap.ic_man);  
  85.             }  
  86.             mTvAccount.setText(mNimUserInfo.getAccount());  
  87.             mTvNike.setText(mNimUserInfo.getName());  
  88.             String remark = mNimUserInfo.getName();  
  89.             Map<String, Object> extensionMap = mNimUserInfo.getExtensionMap();  
  90.             if (extensionMap != null && extensionMap.containsKey("remark")){  
  91.                 remark = extensionMap.get("remark").toString();  
  92.             }  
  93.             mTvRemark.setText(remark);  
  94.         }  
  95.   
  96.     }  
  97.   
  98.     /** 
  99.      * 设置备注信息 
  100.      */  
  101.     @OnClick(R.id.tv_set_remark)  
  102.     public void setRemark(){  
  103.   
  104.     }  
  105.   
  106.     /** 
  107.      * 添加好友 
  108.      */  
  109.     @OnClick(R.id.tv_add_to_contract)  
  110.     public void add2Contract(){  
  111.         Intent intent = new Intent(this,RequestFriendActivity.class);  
  112.         intent.putExtra("account",mNimUserInfo.getAccount());  
  113.         startActivity(intent);  
  114.     }  
  115.   
  116.     /** 
  117.      * 跳转至聊天界面 
  118.      */  
  119.     @OnClick(R.id.tv_start_chat)  
  120.     public void startChat(){  
  121.         Intent intent = new Intent(this,P2PChatActivity.class);  
  122.         intent.putExtra("NimUserInfo",mNimUserInfo);  
  123.         startActivity(intent);  
  124.     }  
  125.   
  126.     /** 
  127.      * 跳转到视频聊天界面 
  128.      */  
  129.     @OnClick(R.id.tv_video_chat)  
  130.     public void startVideoChat(){  
  131.   
  132.     }  
  133.   
  134.     @OnClick(R.id.iv_back_btn)  
  135.     public void backClick(){  
  136.         this.finish();  
  137.     }  

activity_friend_info.xml

[java]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  7.     android:orientation="vertical"  
  8.     android:fitsSystemWindows="true">  
  9.   
  10.     <include layout="@layout/title_layout"/>  
  11.   
  12.     <LinearLayout  
  13.         android:layout_width="match_parent"  
  14.         android:layout_height="match_parent"  
  15.         android:orientation="vertical"  
  16.         android:background="@color/interval_color">  
  17.   
  18.         <RelativeLayout  
  19.             android:layout_width="match_parent"  
  20.             android:layout_height="100dp"  
  21.             android:layout_marginTop="10dp"  
  22.             android:background="@color/white_color">  
  23.   
  24.             <com.joooonho.SelectableRoundedImageView  
  25.                 android:id="@+id/iv_head_picture"  
  26.                 android:layout_width="80dp"  
  27.                 android:layout_height="80dp"  
  28.                 android:layout_margin="10dp"  
  29.                 app:sriv_oval="true"  
  30.                 android:scaleType="fitXY"  
  31.                 android:src="@mipmap/app_logo_main"/>  
  32.   
  33.             <RelativeLayout  
  34.                 android:layout_width="match_parent"  
  35.                 android:layout_height="match_parent"  
  36.                 android:layout_toRightOf="@id/iv_head_picture"  
  37.                 android:gravity="center_vertical"  
  38.                 android:orientation="vertical">  
  39.   
  40.                 <TextView  
  41.                     android:id="@+id/tv_remark"  
  42.                     android:layout_width="wrap_content"  
  43.                     android:layout_height="wrap_content"  
  44.                     android:text="@string/app_name"  
  45.                     android:textSize="16sp"  
  46.                     android:textColor="@color/app_black_color"/>  
  47.   
  48.                 <ImageView  
  49.                     android:id="@+id/iv_person_sex"  
  50.                     android:layout_toRightOf="@+id/tv_remark"  
  51.                     android:layout_width="15dp"  
  52.                     android:layout_height="15dp"  
  53.                     android:layout_marginLeft="10dp"  
  54.                     android:src="@mipmap/ic_man"/>  
  55.   
  56.                 <TextView  
  57.                     android:id="@+id/tv_tip"  
  58.                     android:layout_width="wrap_content"  
  59.                     android:layout_height="wrap_content"  
  60.                     android:layout_below="@+id/tv_remark"  
  61.                     android:layout_marginTop="10dp"  
  62.                     android:text="@string/account_tip"  
  63.                     android:textSize="16sp"  
  64.                     android:textColor="@color/app_black_color"/>  
  65.   
  66.                 <TextView  
  67.                     android:id="@+id/tv_account"  
  68.                     android:layout_width="wrap_content"  
  69.                     android:layout_height="wrap_content"  
  70.                     android:layout_below="@+id/tv_remark"  
  71.                     android:layout_marginTop="10dp"  
  72.                     android:layout_toRightOf="@+id/tv_tip"  
  73.                     android:text="Ezreal-520"  
  74.                     android:textSize="16sp"  
  75.                     android:textColor="@color/app_black_color"/>  
  76.   
  77.                 <TextView  
  78.                     android:id="@+id/tv_tip_nike"  
  79.                     android:layout_width="wrap_content"  
  80.                     android:layout_height="wrap_content"  
  81.                     android:layout_below="@+id/tv_tip"  
  82.                     android:layout_marginTop="10dp"  
  83.                     android:text="@string/nike_tip"  
  84.                     android:textSize="16sp"  
  85.                     android:textColor="@color/app_black_color"/>  
  86.   
  87.                 <TextView  
  88.                     android:id="@+id/tv_nike"  
  89.                     android:layout_width="wrap_content"  
  90.                     android:layout_height="wrap_content"  
  91.                     android:layout_below="@+id/tv_account"  
  92.                     android:layout_marginTop="10dp"  
  93.                     android:textSize="16sp"  
  94.                     android:layout_toRightOf="@+id/tv_tip_nike"  
  95.                     android:text="Fate"  
  96.                     android:textColor="@color/app_black_color"/>  
  97.             </RelativeLayout>  
  98.   
  99.         </RelativeLayout>  
  100.   
  101.         <View  
  102.             android:layout_width="match_parent"  
  103.             android:layout_height="10dp"/>  
  104.   
  105.         <TextView  
  106.             android:id="@+id/tv_set_remark"  
  107.             android:gravity="center"  
  108.             android:textSize="18sp"  
  109.             android:layout_width="match_parent"  
  110.             android:layout_height="40dp"  
  111.             android:background="@color/white_color"  
  112.             android:textColor="@color/app_black_color"  
  113.             android:text="@string/set_remark_info"  
  114.             android:visibility="visible"/>  
  115.   
  116.         <View  
  117.             android:layout_width="match_parent"  
  118.             android:layout_height="40dp"/>  
  119.   
  120.         <TextView  
  121.             android:id="@+id/tv_start_chat"  
  122.             android:gravity="center"  
  123.             android:textSize="18sp"  
  124.             android:layout_width="match_parent"  
  125.             android:layout_height="40dp"  
  126.             android:background="@color/app_blue_color"  
  127.             android:textColor="@color/white_color"  
  128.             android:text="@string/send_message"  
  129.             android:visibility="visible"/>  
  130.   
  131.         <TextView  
  132.             android:id="@+id/tv_video_chat"  
  133.             android:layout_marginTop="10dp"  
  134.             android:gravity="center"  
  135.             android:textSize="18sp"  
  136.             android:layout_width="match_parent"  
  137.             android:layout_height="40dp"  
  138.             android:background="@color/white_color"  
  139.             android:textColor="@color/app_blue_color"  
  140.             android:text="@string/video_chat"  
  141.             android:visibility="gone"/>  
  142.   
  143.         <TextView  
  144.             android:id="@+id/tv_add_to_contract"  
  145.             android:layout_marginTop="10dp"  
  146.             android:gravity="center"  
  147.             android:textSize="18sp"  
  148.             android:layout_width="match_parent"  
  149.             android:layout_height="40dp"  
  150.             android:background="@color/app_blue_color"  
  151.             android:textColor="@color/white_color"  
  152.             android:text="@string/add_to_contract"/>  
  153.   
  154.     </LinearLayout>  
  155.   
  156.   
  157. </LinearLayout>  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值