微信的门户页面框架设计

设计目标:

设计包含四个tab页面的app

功能说明:

通过AS编写代码实现该程序

代码解析:

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

   <TextView
       android:id="@+id/Textview"
       android:layout_width="wrap_content"
       android:layout_height="80dp"
       android:layout_weight="1"
       android:gravity="center"
       android:text="Gcy Wechat"
       android:textColor="@color/white"
       android:textSize="30sp"></TextView>

</LinearLayout>

<LinearLayout
        android:id="@+id/LinearLayout_wechat"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/wechat2" />
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="微信"
        android:textColor="@color/white"
        android:textSize="25sp" />
</LinearLayout>

private FragmentManager fragmentManager;
 
private void initFragment(){
    fragmentManager=getFragmentManager();
    FragmentTransaction transaction=fragmentManager.beginTransaction();  //开始交互控制
    transaction.add(R.id.id_content,wechatFragment);  //把fragment加入到id_content
    transaction.add(R.id.id_content,friendFragment);
    transaction.add(R.id.id_content,contactFragment);
    transaction.add(R.id.id_content,configFragment);
    transaction.commit();
}

package com.example.mywork;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class wechatFragment extends Fragment {
    public wechatFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        // 压缩器,把xml文件压缩到容器中
        return inflater.inflate(R.layout.fragment_wechat, container, false);
    }
}

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".wechatFragment">
    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="这是微信聊天界面"
        android:textSize="30dp"
        android:gravity="center"/>
</LinearLayout>

private void changeColor(int i){
    imageView1.setImageResource(R.drawable.wechat2);
    imageView2.setImageResource(R.drawable.friend2);
    imageView3.setImageResource(R.drawable.contact2);
    imageView4.setImageResource(R.drawable.config2);
    textView1.setTextColor(Color.rgb(255, 255, 255));
    textView2.setTextColor(Color.rgb(255, 255, 255));
    textView3.setTextColor(Color.rgb(255, 255, 255));
    textView4.setTextColor(Color.rgb(255, 255, 255));
    switch (i){
        case 0:
            imageView1.setImageResource(R.drawable.wechat1);
            textView1.setTextColor(Color.rgb(26,250,41));
            break;
        case 1:
            imageView2.setImageResource(R.drawable.friend1);
            textView2.setTextColor(Color.rgb(26,250,41));
            break;
        case 2:
            imageView3.setImageResource(R.drawable.contact1);
            textView3.setTextColor(Color.rgb(26,250,41));
            break;
        case 3:
            imageView4.setImageResource(R.drawable.config1);
            textView4.setTextColor(Color.rgb(26,250,41));
            break;
        default:
            break;
    }
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.LinearLayout_wechat:
            changeColor(0);
            showfragment(0);
            break;
        case R.id.LinearLayout_friend:
            changeColor(1);
            showfragment(1);
            break;
        case R.id.LinearLayout_contact:
            changeColor(2);
            showfragment(2);
            break;
        case R.id.LinearLayout_config:
            changeColor(3);
            showfragment(3);
            break;
        default:
            break;
    }
}

private void initFragment(){
    fragmentManager=getFragmentManager();
    FragmentTransaction transaction=fragmentManager.beginTransaction();  //开始交互控制
    transaction.add(R.id.id_content,wechatFragment);  //把fragment加入到id_content
    transaction.add(R.id.id_content,friendFragment);
    transaction.add(R.id.id_content,contactFragment);
    transaction.add(R.id.id_content,configFragment);
    //隐藏4个tag
    hideFragment(transaction); 
    //或者  changeColor(0);showfragment(0); 显示微信聊天页面
    transaction.commit();
}

1.

在 Adapter 里面直接对控件做点击事件

@Override

public void onBindViewHolder(@NonNull XxxViewHolder holder, int position) {
    holder.控件名.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View v) {
            // TODO:

        }

    });

}

在 Adapter 里写接口

public interface OnItemClickListener {
    void onItemClick(参数类型 参数名 , ...);

}

private OnItemClickListener mListener;

public XxxAdapter(Context context, OnItemClickListener listener) {
    mContext = context;

    mListener = listener;

}

@Override

public void onBindViewHolder(@NonNull XxxViewHolder holder, int position) {
    holder.控件名.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View v) {
            mListener.onItemClick(content);

        }

    });

}

在 Activity 或 Fragment 上实现接口中定义的方法

public class XxxActivity extends AppCompatActivity implements XxxAdapter.OnItemClickListener

XxxAdapter adapter = new XxxAdapter(context, this);

@Override

public void onItemClick(String content) {
    // TODO:

}

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

activity_main1.xml

xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_margin="8dp"

    android:background="@drawable/common_bg"

    android:orientation="vertical">

    <TextView

        android:id="@+id/textView1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_centerVertical="true"

        android:layout_marginLeft="8dp"

        android:gravity="center"

        android:text="TextView" />

</LinearLayout>

activity_main2.xml

<?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"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:gravity="center"

    android:orientation="vertical"

    tools:context=".MainActivity2">

    <TextView

        android:id="@+id/textView7"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:gravity="center"

        android:text="这是第一个activity"

        android:textSize="40sp" />

   

</LinearLayout>

activity_main3.xml

<?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"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity3">

    <TextView

        android:id="@+id/textView5"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="center"

        android:text="新闻详情"

        android:textSize="40dp" />

</LinearLayout>

新闻列表

ackage com.example.myworkgwl01;

import android.content.Context;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.app.Fragment;

import com.example.myworkgwl01.Myadapter;

import androidx.annotation.Nullable;

import androidx.recyclerview.widget.ItemTouchHelper;

import androidx.recyclerview.widget.LinearLayoutManager;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

import java.util.List;

public class contactFragment extends Fragment {
    private RecyclerView recyclerView;

    private Myadapter myadapter;

    private List<String> list = new ArrayList<>();

    private Context context;

    public contactFragment() {
        // Required empty public constructor

    }

    private void initData(){
        for(int i=0;i<30;i++) {
            list.add("最新新闻" + i );

        }

    }

    private void initView3(){
        context=this.getActivity();

        myadapter=new Myadapter(list,context);

        LinearLayoutManager manager3=new LinearLayoutManager(context);

        manager3.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView.setAdapter(myadapter);

        recyclerView.setLayoutManager(manager3);

    }

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

//        return inflater.inflate(R.layout.contact, container, false);

        View view = inflater.inflate(R.layout.contact, container, false);

        recyclerView=view.findViewById(R.id.recycleview);

        initData();

        initView3();

        return view;

    }

}

Mainactivity2

package com.example.myworkgwl01;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

public class MainActivity2 extends AppCompatActivity {
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main2);

       

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(resultCode==31){
            String state=data.getStringExtra("state");

            Log.d("life",state);

        }

    }

    @Override

    protected void onStart() {
        super.onStart();

        Log.d("life","activity1 is onStart...");

    }

    @Override

    protected void onPostResume() {
        super.onPostResume();

        Log.d("life","activity1 is onPostResume...");

    }

    @Override

    protected void onRestart() {
        super.onRestart();

        Log.d("life","activity1 is onReStart...");

    }

    @Override

    protected void onPause() {
        super.onPause();

        Log.d("life","activity1 is onPause...");

    }

    @Override

    protected void onStop() {
        super.onStop();

        Log.d("life","activity1 is onStop...");

    }

    @Override

    protected void onDestroy() {
        super.onDestroy();

        Log.d("life","activity1 is onDestroy...");

    }

    @Override

    public void finish() {
        super.finish();

        Log.d("life","activity1 is finish...");

    }

    @Override

    public void finishActivity(int requestCode) {
        super.finishActivity(requestCode);

        Log.d("life","activity1 is finishActivity...");

    }

}

Mainactivity3

package com.example.myworkgwl01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

public class MainActivity3 extends AppCompatActivity {
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main3);

    }

    @Override

    protected void onPostResume() {
        super.onPostResume();

        Log.d("life", "activity2 is onPostResume...");

    }

    @Override

    protected void onStart() {
        super.onStart();

        Log.d("life", "activity2 is onStart...");

    }

    @Override

    protected void onRestart() {
        super.onRestart();

        Log.d("life", "activity2 is onReStart...");

    }

    @Override

    protected void onStop() {
        super.onStop();

        Log.d("life", "activity2 is onStop...");

    }

    @Override

    protected void onDestroy() {
        super.onDestroy();

        Log.d("life", "activity2 is onDestroy...");

    }

    @Override

    protected void onPause() {
        super.onPause();

        Log.d("life", "activity2 is onPause...");

    }

    @Override

    public void finish() {
        super.finish();

        Log.d("life", "activity2 is finish...");

    }

    @Override

    public void finishActivity(int requestCode) {
        super.finishActivity(requestCode);

        Log.d("life", "activity2 is finishActivity...");

    }

}

2.

public class MainActivity extends Activity {
    private final static String TAG="MainActivity";

   

    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        Button btnOpen=(Button)this.findViewById(R.id.btnOpen);

        btnOpen.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
               

                //第二个参数为请求码,可以根据业务需求自己编号

                startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);

            }

        });

    }

   

    /**

     * 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法

     *

     * requestCode 请求码,即调用startActivityForResult()传递过去的值

     * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity

     */

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据

        Log.i(TAG, result);

    }

}

public class OtherActivity extends Activity {
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.other);

        Button btnClose=(Button)findViewById(R.id.btnClose);

        btnClose.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                //数据是使用Intent返回

                Intent intent = new Intent();

                //把返回数据存入Intent

                intent.putExtra("result", "My name is linjiqin");

                //设置返回数据

                OtherActivity.this.setResult(RESULT_OK, intent);

                //关闭Activity

                OtherActivity.this.finish();

            }

        });

       

    }

}

注册provider:
<provider

    android:name=".MyContentProvider"

    android:authorities="com.example.mycontentprovider.mycontentprovider"  //唯一标识

    android:enabled="true"

android:exported="true"/>

provider获取数据:

public static void getContactsInfo(Context context) {
        //1. 获取内容解析者

        ContentResolver contentResolver = context.getContentResolver();

        // ContactsContract 联系人的API

        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

        String[] projection = new String[]{
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,

                ContactsContract.CommonDataKinds.Phone.NUMBER,

                ContactsContract.CommonDataKinds.Phone.CONTACT_ID

        };

        //2.查询操作

        //uri               :查询地址

        //projection        :查询的数据字段名称

        //selection         :查询的条件 where id=..

        //selectionArgs     :查询条件的参数

        //sortOrder         :排序s

//        contentResolver.query(uri, projection, selection, selectionArgs, sortOrder);

       Cursor cursor = contentResolver.query(uri, projection, null, null, null);

        while (cursor.moveToNext()) {
            String name = cursor.getString(0);

            String number = cursor.getString(1);

            int id = cursor.getInt(2);

           Bitmap bitmap = getContactPhoto(context, id);

            if (null == bitmap) {
                Log.e("Contact", "id: " + id + " 头像不为空");

            } else {
                Log.e("Contact", "id: " + id + " 头像为空");

            }

        }

    }

    public static Bitmap getContactPhoto(Context context, int id) {
        ContentResolver contentResolver = context.getContentResolver();

//        Uri uri = ContactsContract.Contacts.CONTENT_URI;

        //拼接路径

        //http://www.baidu.com/jdk

        //参数一:表的路径

        //参数二:联系人具体的路径

        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, id + "");

        //获取联系人头像,以流的方式返回

        InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);

        Bitmap bitmap = BitmapFactory.decodeStream(is);

        if (is != null) {
            try {
                is.close();

                is = null;

            } catch (IOException e) {
                e.printStackTrace();

            }

        }

        return bitmap;

    }

Resolver调用:

ContentResolver resolver = context.getContentResolver();

                    resolver.delete(

                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

                            MediaStore.Images.Media.DISPLAY_NAME + "='" + originFileName + "." + photo.extensionName + "'",

                            null

                    );
 

 仓库地址:

https://gitee.com/hubei-university_2_0/as/issues/I5TKFH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值