Dome小总结

来源:互联网 发布:易语言打码源码 编辑:程序博客网 时间:2024/05/18 03:47

前言
花了业余时间做了一个很low也比较简单的小dome,但是其实做的时候并不是自己想的那么简单,到也学了不少新的知识,把一些有用的知识点总结一下吧,不然又石沉大海了。
Dome地址
聚文小Dome:http://download.csdn.net/my
- 卡片式布局
- 用recyclerview代替了listview
- Snackbar的详细用法
- 分享到QQ微信等聊天平台
- Webview的刷新等功能
- Toolbar的设置

recyclerview

recyclerview是listview的代替品并且功能也比listview要强大
布局:

    <android.support.v7.widget.RecyclerView        android:id="@+id/recycler_view"        android:layout_width="match_parent"        android:layout_height="match_parent" />

在代码中的引用和它的适配器

public class Zixun_Adapter extends RecyclerView.Adapter<Zixun_Adapter.ViewHolder>{    private List<UserZX.ResultBean.DataBean> list;    private Context context;    public Zixun_Adapter(List<UserZX.ResultBean.DataBean> list) {        this.list = list;    }    static class ViewHolder extends RecyclerView.ViewHolder{        ImageView imageView;        TextView title,name,timer;        CardView cardView;        public ViewHolder(View itemView) {            super(itemView);//获取id            cardView= (CardView) itemView;           imageView= (ImageView) itemView.findViewById(R.id.one_img);            title= (TextView) itemView.findViewById(R.id.one_title);            name= (TextView) itemView.findViewById(R.id.one_name);            timer= (TextView) itemView.findViewById(R.id.one_timer);        }    }    @Override    public ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {        context=parent.getContext();        View view = LayoutInflater.from(context)                .inflate(R.layout.fragment_zixun_zi_item, parent, false);        final ViewHolder holder = new ViewHolder(view);//        设置点击监听这是它的子条目点击事件        holder.cardView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {//                获取具体的某个位置                int position = holder.getAdapterPosition();                Intent intent = new Intent(context, Web_Activity.class);                intent.putExtra("data",list.get(position).getUrl());                context.startActivity(intent);            }        });        return holder;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        holder.timer.setText(list.get(position).getDate());        holder.name.setText(list.get(position).getAuthor_name());        holder.title.setText(list.get(position).getTitle());        String url = list.get(position).getThumbnail_pic_s();        Glide.with(context)                .load(url)                .into(holder.imageView);    }    @Override    public int getItemCount() {        return list.size();    }}//适配 Zixun_Adapter adapter = new Zixun_Adapter(list);            recyclerview.setAdapter(adapter);

webview的使用

webview是加载网页的控件他内部也有很多使用的小细节比如刷新,是否在本浏览器里面打开复制链接等。。

public class Web_Activity extends AppCompatActivity {        private WebView webView;        private ProgressBar progressbar;        private Toolbar toolbar;        private String data;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web_);        webView= (WebView) findViewById(R.id.web_view);        progressbar= (ProgressBar) findViewById(R.id.progressbar);        toolbar= (Toolbar) findViewById(R.id.web_toolbar);//        设置支持Toolbar        setSupportActionBar(toolbar);        //对Toolbar进行具体的设置        ActionBar actionBar = getSupportActionBar();        if (actionBar!=null){            actionBar.setDisplayHomeAsUpEnabled(true);        }        Intent intent = getIntent();        data = intent.getStringExtra("data");        webView.getSettings().setJavaScriptEnabled(true);//        在本浏览器里面打开而不是跳转到外面的浏览器        webView.setWebViewClient(new WebViewClient(){            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                view.loadUrl(url);                return true;            }        });//        重写加载进度条的方法        webView.setWebChromeClient(new WebChromeClient(){            @Override            public void onProgressChanged(WebView view, int newProgress) {                progressbar.setProgress(newProgress);                if (newProgress==100){                    progressbar.setVisibility(View.GONE);                }else {                    progressbar.setVisibility(View.VISIBLE);                }            }            //        设置标题            @Override            public void onReceivedTitle(WebView view, String title) {                super.onReceivedTitle(view, title);                setTitle(title);            }        });        webView.loadUrl(data);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.web,menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()){//            返回到上一个Activity            case android.R.id.home:                finish();                break;            case R.id.share:            //分享的方法                   Intent share= new Intent();                share.setAction(Intent.ACTION_SEND);                share.setType("text/plain");                share.putExtra(Intent.EXTRA_TEXT,data);                startActivity(Intent.createChooser(share,getTitle()));//                Toast.makeText(this,"分享界面",Toast.LENGTH_LONG).show();                break;            case R.id.shuaxin://                实现刷新的方法调用Webview的方法                webView.reload();                Toast.makeText(this,"刷新成功",Toast.LENGTH_LONG).show();                break;            case R.id.open:            //在别的浏览器里面打开              Intent intent=  new Intent();                intent.setAction(Intent.ACTION_VIEW);                intent.setData(Uri.parse(data));                startActivity(intent);//                Toast.makeText(this,"在浏览器中打开",Toast.LENGTH_LONG).show();                break;            case R.id.copy://                赋值到剪切板的过程             ClipboardManager manager= (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);                manager.setText(data);                Snackbar.make(toolbar,"已复制到剪切板",Snackbar.LENGTH_LONG).show();                break;        }        return true;    }

这里的Webview和Toolbar是联合使用的,通过点击toolbar上面的按钮来控制。其实都是一些零碎的知识点但是 却很实用。
还有就是对网络请求时会出现乱码的问题,那是由于定义读取字节1024时,转化时出现的问题这里我们可以这样将字节流转化为字符流来解决该问题

     StringBuffer sb = new StringBuffer();//将字节流转化为字符流解决乱码问题                char[] buffer = new char[1024];                int len=-1;                InputStream in = conn.getInputStream();                InputStreamReader reader = new InputStreamReader(in, "utf-8");                while ((len=reader.read(buffer))!=-1){                    sb.append(new String(buffer,0,len));                }                in.close();                return sb.toString();

查询
搜索是一个APP重要的部分这里我们可以 通过给Toolbar里面布局一个editor,并且通过对数据库的模糊查询来实现查询操作。
end
感觉如果想要做一个帅帅的APP,时尚的审美观加上很强的代码功底。so继续努力!