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继续努力!
阅读全文
1 0
- Dome小总结
- Phonegap(cordova)小Dome
- Android ContentProvider小dome
- Android 闹钟小Dome
- 20171202小Dome
- dome
- 短信验证码自动填写小DOME
- [UWP小白日记-2]SQLite数据库DOME
- 学习Bootstrap后制作一个小dome的所思
- dome资料
- 蓝牙Dome
- myBatis dome
- jsp dome
- 在ListView下面添加一个相对布局的小Dome-布局优化
- 贪吃蛇—蓝鸥游戏/AR/VR在线公开课小项目Dome(一)
- 及其简单的Rxjava+Retrofit+Fresco+ok,mvp小Dome解析数据
- 小总结
- 小总结
- Python 3从入门到精通15-多维列表
- JavaScript prototype 属性和 对象属性、类属性的区别
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
- C#6.0中10大新特性的应用和总结
- USB+Hid
- Dome小总结
- HDU 2577 How to Type(dp+状态标记)
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 分组+树状数组
- IP核
- .NET正则类及其方法应用
- 斯特林公式(n的阶乘近似)
- 将一个正整数分解质因数
- ufldl学习笔记与编程作业:Linear Regression(线性回归)
- hdu 5794