zoukankan      html  css  js  c++  java
  • 安卓应用的界面编程(1)

        上学期做过一个java web的网站,初步了解了java写网站后台的流程,但是个人代码的封装性很差,完成后也没有再去改动,这几天会花时间整理一下把博客写出来。

        最近开始学习android的开发,用的是android studio,由于AVD和genymotion都用不上,所以用的真机调试,昨天发现挂部落冲突用的夜神安卓模拟器也可以用来调试程序,方便了不少。

        最近就边看边学边写写博客,感觉有点凌乱,慢慢应该会好。

    android应有的所有UI组件都继承了View类,View组件非常类似于Swing编程的JPanel,代表一个空白的矩形区域。

    ViewGroup是一个重要的子类,通常作为其他组件的容器,主要当成容器类使用,由于是抽象类,实际中使用其子类作为容器,例如各种布局管理器

    android的所有UI组件都是建立在View和ViewGroup基础之上的。

    ViewGroup容器控制其子组件的分布依赖于ViewGroup.LayoutParams(子组件的布局高度和宽度)/ViewGroup.MarginLayoutParams(页边距)

    推荐使用XML布局文件控制UI界面

    !!正在app/src/main/res/layout目录下定义一个主文件名任意的XML布局文件后(R.java会自动收录该布局资源),java代码可通过如下方法在Activity中显示该视图。

    setContentView(R.layout.<资源文件名>);

    findViewById(R.id.<android.id.属性值>);

    使用XML布局文件和Java代码混合控制UI界面

    习惯上把变化小/行为比较固定的组件放在XML布局文件中管理

    变化较多/行为控制较复杂的交给Java代码来管理

    下面是一个简单图片浏览器

    首先在一个布局文件中定义一个简单的线性布局容器

    1 <!--定义线性布局容器-->
    2     <LinearLayout
    3         xmlns:android="http://schemas.android.com/apk/res/android"
    4         xmlns:tools="http://schemas.android.com/tools"
    5         tools:context=".MainActivity"
    6         android:id="@+id/root"
    7         android:orientation="vertical"
    8         android:layout_width="match_parent"
    9         android:layout_height="match_parent"></LinearLayout>
    View Code

    下面是该程序的实例代码

    当然首先要把图片复制进app/res/drawable文件夹里面

     1 public class MainActivity extends AppCompatActivity {
     2 
     3     //定义一个访问图片的数组
     4     int[] images = new int[]{
     5             R.drawable.java,
     6             R.drawable.javaee,
     7             R.drawable.swift,
     8     };
     9     int currentIma=0;
    10     @Override
    11     protected void onCreate(Bundle savedInstanceState) {
    12         super.onCreate(savedInstanceState);
    13         setContentView(R.layout.activity_main);
    14         //获取LinearLayout布局容器
    15         LinearLayout main=(LinearLayout) findViewById(R.id.root);
    16         //程序创建ImageView组件
    17         final ImageView image=new ImageView(this);
    18         //将ImageView组件添加到LinearLayout布局容器中
    19         main.addView(image);
    20         //初始化时显示第一张图片
    21         image.setImageResource(images[0]);
    22         image.setOnClickListener(new View.OnClickListener(){
    23             @Override
    24             public void onClick(View v){
    25                 //改变ImageView里显示的图片
    26                 image.setImageResource(images[++currentIma%images.length]);
    27             }
    28         });
    29         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    30         setSupportActionBar(toolbar);
    31 
    32         FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    33         fab.setOnClickListener(new View.OnClickListener() {
    34             @Override
    35             public void onClick(View view) {
    36                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
    37                         .setAction("Action", null).show();
    38             }
    39         });
    40     }
    41 }
    View Code

    然后看了一下开发自定义View的内容

    首先定义一个继承View基类的子类,然后重写View类的一个或多个方法

    下面是跟随手指的小球的程序实例(只重写了onDraw方法和onTouchEvent方法)

    1.自定义组件DrawView.java

     1 public class DrawView extends View {
     2     public float currentX=40;
     3     public float currentY=50;
     4     //定义并创建画笔
     5     Paint p = new Paint();
     6     public DrawView(Context context){
     7         super(context);
     8     }
     9     public DrawView(Context context,AttributeSet set){
    10         super(context,set);
    11     }
    12     @Override
    13     public void onDraw(Canvas canvas){
    14        super.onDraw(canvas);
    15         //设置画笔的颜色
    16         p.setColor(Color.RED);
    17         //绘制一个小圆(作为小球)
    18         canvas.drawCircle(currentX, currentY, 15, p);
    19     }
    20     //为该组件的碰触事件重写时间处理方法
    21     @Override
    22     public boolean onTouchEvent(MotionEvent event){
    23         //修改currentX,currentY两个属性
    24         currentX=event.getX();
    25         currentY=event.getY();
    26         //通知当前组件重绘自己
    27         invalidate();
    28         //返回true表明该处理方法已经处理该事件
    29         return true;
    30     }
    31 }
    View Code

    2.Activity类

     1 super.onCreate(savedInstanceState);
     2         setContentView(R.layout.activity_main);
     3         /*
     4         //获取布局文件中的LinearLayout容器
     5         LinearLayout root=(LinearLayout)findViewById(R.id.root);
     6 
     7         //创建DrawView组件
     8         final DrawView draw=new DrawView(this);
     9         //设置自定义组件的最小宽度,高度
    10         draw.setMinimumWidth(300);
    11         draw.setMinimumHeight(500);
    12         root.addView(draw);
    13 */
    14 }
    View Code

    附:如果在布局文件中管理该组件

     1  <LinearLayout
     2         xmlns:android="http://schemas.android.com/apk/res/android"
     3         android:orientation="vertical"
     4         android:layout_width="match_parent"
     5         android:layout_height="match_parent"
     6         android:id="@+id/root">
     7         <mocking.com.followball.DrawView
     8             android:layout_width="match_parent"
     9             android:layout_height="match_parent" />
    10     </LinearLayout>
    View Code

    则Activity类可以省去注释的部分,效果图如下。。新手入门

     

  • 相关阅读:
    flex 鼠标事件和效果
    查看和修改Oracle服务器端的字符集
    Oracle随机抽取数据sql
    hibernate.properties
    Oracle11g物理文件冷备份(转)
    支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url
    关于Oracle的行转列
    Intellij idea 12 tomcat日志窗口不显示问题
    在Servlet中获取来源URL
    uniapp 实现小程序列表项左滑菜单
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/5164323.html
Copyright © 2011-2022 走看看