第二行代码复习笔记之控件以及布局

3.1.常用控件

TextView:

    android:gravity="center"// 居中
    android:textSize="24sp" //文字大小
    android:textColor="#00ff00" //文字颜色
    android:hint=""  //内容为空时显示文字信息
    android:maxLines="2" //默认最多显示两行
    android:lines ="1" //单行显示  第二行代码中的singleline已经过时
    android:background="@drawable/dd" //文本框背景图

ImageView:

android:src="@drawable/img_q" //导入drawable下的图片资源

ProgressBar:进度条工具
android:visibility =”visible” //visible , invisible不可见占位置,隐形。 gone彻底消失
也可以在活动中直接使用progressBar.setVisibility(View.VISIBLE);// View.GONE ; View.INVISIBLE

style="?android:attr/progressBarStyleHorizontal"  //改变进度条形状,圆形-->水平

AlertDialog 警告对话框
注意:广播中不能直接开启对话框, 同时ProgressDialog和警告对话框差不多
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
eg:

button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("This is Dialog");
                dialog.setMessage("Something important.");
                dialog.setCancelable(false);
                dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                dialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                dialog.show();
            }
        });

3.2 四大布局

LinearLayout 线性布局基本属性:

        android:orientation="vertical" // horizontal 水平    vertical 垂直
        android:background="#ffffff" //布局背景
        android:gravity="top"  // 位置,  top,  buttom,  left , right
        子控件可以使用
        android:layout_weight="1" //来控制控件所占比例

RelativeLayput 相对布局基本属性:
主要是子布局中多了

        android:alignParentRight="true" //相对于母布局在母布局右方
        android:alignParentLeft="true"  //相对于母布局在母布局左方
        android:alignParentBottom="true"  //相对于母布局在母布局底方
        android:alignParentTop="true"  //相对于母布局在母布局上方
        android:centerInParent="true"  //相对于母布局在母布局中间
        android:layout_below="@id/button3" //相对于button3的正上方
        android:layout_toRightOf="id/button3" //相对button3来说是右边

FrameLayout 帧布局:
没有方便的定位方式,默认都在布局的左上角

百分比布局
1.要添加依赖库

compile 'com.android.support:percent:25.3.1'

2.更改布局

<android.support.percent.PercentFrameLayout >    //需要写完整的包路径    

子布局中:
android:layout_gravity=”left|bottom”
app:layout_widthPercent=”50%”
app:layout_heightPercent=”50%”

3.2.1 用布局做标题栏
1.创建一个布局title;
2.引入布局 <include layout="@layout/title" />
3.隐藏原先标题栏

    ActionBar actionbar = getSupportActionBar();
        if(actionbar != null) {
        actionbar.hide();
        }

3.2.2 在自制标题栏中加入点击事件,并且任意活动只要调用就都有点击事件。
1.新建TitleLayout类继承LinearLayout,在其中加载布局
2.将布局放入activity_main中
3.再向TitleLayout中添加点击事件

3.3 两大滑动控件(ListView ,RecyclerView)

**ListView** 最常用,也是最容易理解的滑动控件,简单
**RecyclerView** 相比较ListView功能更强大,更加模块化,官方推荐版本,虽不那么容易理解,但已经分类清晰,真做起来还是不难的。RecyclerView除能横向布局以外,还能通过GridLayoutManager和StaggeredGridLayoutManager实现网格布局和瀑布布局。

ListView两个简单实例:
eg:

public class MainActivity extends AppCompatActivity {
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        ListView listView = (ListView) findViewById(R.id.list_item);
        FruitAdapter adapter = new FruitAdapter();
        listView.setAdapter(adapter);
    }
         class FruitAdapter extends BaseAdapter {
             @Override
             public int getCount() {    //返回需要显示的条目数量
                 return 12;         //listView.size();
             }

             @Override
             public Object getItem(int position) {
                 return null;           //list.get(position);返回当前的小布局,只为点击事件用
             }

             @Override
             public long getItemId(int position) {
                 return 0;          //position   返回当前的位置,int型 , 只为点击事件用
             }

             @Override
             public View getView(int position, View convertView, ViewGroup parent) {
                 TextView view;                //手动创建一个滚动文本框
                 if (convertView != null) {   //保证只有固定的实例,其实就是标准写法了。
                     view = (TextView) convertView;
                 } else {
                     view = new TextView(mContext);
                 }
                 view.setText("position"+position);
                 view.setTextSize(40);
                 return view;  //返回相对应需要显示的view
             }
         }
}

eg: 一个新闻例子

public class NewsAdapter extends ArrayAdapter<NewsBean> {
    private int resourseId;  //当前布局条名称对应的id,即上个例子中getItemId()方法中得到的值

    public NewsAdapter(Context context, int textViewResourseId, List<NewsBean> newsList) {        //构造函数,主要给当前布局初始化,也就是得到相对应的资源数据。
        super(context, textViewResourseId, newsList);
        resourseId = textViewResourseId;  //初始化得到的数据id数据。
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        NewsBean newsBean = getItem(position);  //相当于上例子中的getItem()得到的值。
        View view; //准备得到当前编辑布局的实例
        ViewHolder viewHolder;
        if (convertView == null) {
             //加载布局,得到实例
            view = LayoutInflater.from(getContext()).inflate(resourseId, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.image = (ImageView) view.findViewById(R.id.image_view);
            viewHolder.title = (TextView) view.findViewById(R.id.title_item);
            viewHolder.content = (TextView) view.findViewById(R.id.content_item);
            view.setTag(viewHolder);
        } else {
            view = convertView;
            viewHolder = (ViewHolder)view.getTag();
        }
        viewHolder.image.setImageDrawable(newsBean.image);
        viewHolder.title.setText(newsBean.title);
        viewHolder.content.setText(newsBean.content);
        return view;
    }

    class ViewHolder {
        ImageView image;
        TextView title;
        TextView content;
    }

}

两个例子只是单纯的讲述了ListView适配器的建立,其他如资源数据的建立和布局并未多讲。以下总结:
1. 建立ListView布局,和相对应的子布局。
2. 在MainActivity中找到ListView布局,并且建立对象。
3. 得到已经用List集合封装过的数据
___________1) 建立Bean类用做实体。建立对象。
———— 2) 建立Util包,用集合打包所有Bean对象。并且建立方法供给别的地方调用。
4. 建立自己创建的适配器实例。并且传递三个参数,分别是当前活动MainActivity.this(可以放到全局变量
中,使用方便),第二个参数int型的布局id,第三个是List集合封装的数据。
—————1) 适配器中基本都围绕4个方法所得到的数据,getCount,要展示的条目数量; getItem得到资源实例,getItemId当前条目的id,最后一个比较烦的处理getView要展示的布局。
5. List.setAdapter(适配器实例)。
6. listView创建点击事件的监听器,监听器是接口adatpterView下的。

RecyclerView的一个简单例子。
eg: RecyclerView的适配器

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
        private List<NewsBean> mNewsList;
    class ViewHolder extends RecyclerView.ViewHolder{  //定义各个控件,以便存储。

        View newsView;
        ImageView image;
        TextView title;
        TextView content;

        public ViewHolder(View view) { //在内部类的构造函数中实现对各个控件的查找
            super(view);
            newsView = view;
            image = (ImageView) view.findViewById(R.id.image_view);
            title = (TextView) view.findViewById(R.id.title_item);
            content = (TextView) view.findViewById(R.id.content_item);

        }
    }
    public NewsAdapter(List<NewsBean> newsList) {
        mNewsList = newsList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false);
      final ViewHolder viewHolder = new ViewHolder(view);
      viewHolder.newsView.setOnclickListenter(new View.OnclickListener() {
        public void onClick(View v) {
        int position = holder.getAdapterPosition();
        NewsBean newsBean = mNewsList.get(position);
        Toast.makeText(v.getContext, "newsView", Toast.LENGTH_SHORT).show;

}
});
viewHolder.content.setOnclickListenter(new View.OnclickListener() {
        public void onClick(View v) {
        int position = holder.getAdapterPosition();
        NewsBean newsBean = mNewsList.get(position);
        Toast.makeText(v.getContext, "content", Toast.LENGTH_SHORT).show;

}
});
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        NewsBean newsBean = mNewsList.get(position);
        holder.image.setImageDrawable(newsBean.image);
        holder.title.setText(newsBean.title);
        holder.content.setText(newsBean.content);
    }

    @Override
    public int getItemCount() {
        return mNewsList.size();
    }
}

在MainActivity中的代码如下:

public class MainActivity extends AppCompatActivity {

    private List<NewsBean> newsList;
    private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_on);
        newsList = NewsUtil.getAllNews(mContext);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        NewsAdapter newsAdapter = new NewsAdapter(newsList);
        recyclerView.setAdapter(newsAdapter);

    }
}

Recycler View的总结:
1. 相比较ListView而言,功能更加强大,可以实现内容和标题的分别点击,更加模块化,也更加的直观。
2. 因为是后继出现的功能,首先要添加依赖库,并且布局中要写全名。
2. 同样定义一个内部类继承自Recycler.ViewHoler,实现对控件的存储,然后用构造函数初始化控件。
3. 在NewsAdapter的构造函数中实现资源数据的接收和初始化。
4. onCreateViewHolder 如字面意思,创建一个当前的布局实例和内部类实例,并且返回内部类实例
5. onBindViewHolder 如字面意思,绑定控件和资源数据。
6. getItemCount 如字面意思,得到需要展示的项目条行数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值