ONLY-yours / Android-StudyHub

0 stars 0 forks source link

12.26Android自测题目 #1

Open ONLY-yours opened 3 years ago

ONLY-yours commented 3 years ago

12.26小测试

Java部分:

  1. 简述抽象类和接口区别
  2. java中赋值操作部分,哪些属于浅拷贝,哪些为深拷贝
  3. 尽量使用多种方式创建java对象(能写多少写多少)
  4. 简述“equals”与“==”、“hashCode”的区别和使用场景
  5. 实现一个自己的Map类
  6. 用java实现冒泡排序

Android UI部分:

  1. 如何获取View的宽高
  2. 不使用Button组件,通过TextView和View完成Button的样式及点击功能。(要求长度40dp、宽度20dp,居中,字体大小为10dp,其余无硬性要求)
  3. 使用Toast弹出消息(尽量多种方法)
  4. 使用EditView编写密码框(上限10个字数,无下划线,背景为红色)
  5. 如何隐藏Android自带的顶部控制栏(尽量多种方法)
  6. 如何让界面上元素消失(尽量多种方法)
  7. 使用ListView实现上下滑动
  8. 使用RecyclerView实现左右滑动
  9. 使用ImageView加载本地图片(drawble下的第一个图片)
  10. 为Imageiew加载网络图片(若网络加载失败,失败图片显示为drawble下的第一个图片)网络图片地址:https://img-home.csdnimg.cn/images/20201124032506.png
  11. res资源下的drawble和mipmap两者区别
  12. 如何在一个界面中引入另外一个绘制好的xml
  13. 界面过长情况下,使用控件实现页面上下滚动效果
  14. 请尽量还原下图中的登陆模块:

要求:

  1. 图片过大可以直接查看连接:https://github.com/ONLY-yours/Picture/blob/master/Android-test-12.26.png
  2. 账号要求:不能输入除了数字之外的其他字符
  3. 密码要求不能明文显示
  4. 要求未输入账号和密码的状态下登陆按钮为灰色且不能点击,当两者同时存在时,颜色同上方顶部蓝色相同。(java代码)
  5. 尽量还原,尺寸、颜色、字体大小等请自行观测,图片要求尽量还原。

image

RookieTu commented 3 years ago

Java部分:

  1. 简述抽象类和接口区别

    ​ 共同点:都是一种类,都不能使用new操作符创建实例

    ​ 不同点:抽象类的方法只能在抽象类的子类中实现并且方法要全部声明用extends,接口适用于多个对象的n个共同属性的n个方法用implements

  2. java中赋值操作部分,哪些属于浅拷贝,哪些为深拷贝

    引用类型是浅拷贝,赋值的值是深拷贝

  3. 尽量使用多种方式创建java对象(能写多少写多少)

    (1)new一个对象

  4. 简述“equals”与“==”、“hashCode”的区别和使用场景

    ​ == 是比较两个对象的地址所对应的值,返回值是boolean类型

    ​ equals是Object的方法,比较两个对象的地址,返回值也是boolean类型,但我们可以进行重写改变比较的过程。

    ​ hashCode的返回值是int类型,也是Object的一个方法,相同的值hash相同,不同的值hash码也可能相同

  5. 实现一个自己的Map类

    import java.util.LinkedList;
    
    public class New23 {
       static class Entry<K,V>{
           K key;
           V value;
           public Entry(K key,V value){
               super();
               this.key=key;
               this.value=value;
           }
       }
    
       public static class myMap<K,V> {
    
           private static final int MAXSIZE=999;
           LinkedList[] arr = new LinkedList[MAXSIZE];
           private int size;
           public int size(){
               return size;
           }
    
           public void put(K key, V value){
    
               Entry<K, V> e = new Entry(key,value);
    
               //使用hashCode计算新的键值对要放在数组的哪个位置
               int a = key.hashCode()%MAXSIZE;
               if(arr[a]==null){
                   LinkedList list = new LinkedList();
                   list.add(e);
                   arr[a]=list;
               }else{
                   //如果已经存在该key,则覆盖原来的value
                   LinkedList list = arr[a];
                   for(int i=0; i<list.size();i++){
                       Entry<K,V> ele= (Entry) list.get(i);
                       if(ele.key.equals(key)){
                           ele.value=value;
                           return ;
                       }
                   }
                   list.add(e);
               }
           }
    
           public V get(K key){
               int a = key.hashCode()%MAXSIZE;
               if(arr[a]!=null){
                   LinkedList list = arr[a];
                   for(int i=0; i<list.size();i++){
                       Entry<K,V> e= (Entry) list.get(i);
                       if(e.key.equals(key)){
                           return e.value;
                       }
                   }
               }
               return null;
           }
    
           public static void main(String[] args) {
               myMap m = new myMap();
               m.put("01",100);
               m.put("02",99);
               m.put("03",98);
               m.put("04",97);
               System.out.println(m.get("02"));
           }
    
       }
    }
    
  6. 用java实现冒泡排序

    int[] arr={8,6,4,9,2,1};
           System.out.println("排序前为:");
           for (int num:arr){
               System.out.print(num+" ");
           }
           System.out.println();
           for (int i=0;i< arr.length;i++){
               for (int j=0;j< arr.length-1-i;j++){
                   if (arr[j]>arr[j+1]){
                       int temp=arr[j];
                       arr[j]=arr[j+1];
                       arr[j+1]=temp;
                   }
               }
           }
           System.out.println("排序后数组为:");
           for (int num:arr){
               System.out.print(num+" ");
           }

Android UI部分:

  1. 如何获取View的宽高

    方法一:使用view的measure方法

    public int getViewWidth(LinearLayout view){
       view.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
       return view.getMeasuredWidth();
    }

    方法二:该activity的监听事件中增加一个宽高的显示

  2. 不使用Button组件,通过TextView和View完成Button的样式及点击功能。(要求长度40dp、宽度20dp,居中,字体大小为10dp,其余无硬性要求)

    <TextView
           android:id="@+id/btn_5"
           android:layout_width="40dp"
           android:layout_height="20dp"
           android:gravity="center"
           android:textSize="10dp"
           android:text="123"/>

    点击功能:

    ​ 跳转:更改对象类型

    ​ 点击变色:设置监听事件,更改背景图片和更改字体颜色

  3. 使用Toast弹出消息(尽量多种方法)

    1.通过makeText方法创建消息提示框

    2.通过Toast类的构造方法创建消息提示框

  4. 使用EditView编写密码框(上限10个字数,无下划线,背景为红色)

    <EditText
           android:id="@+id/btn_5"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="#FF0000"
           android:maxLength="10"
           android:theme="@style/MyEditText"
           />
    <style name="MyEditText" parent="Theme.AppCompat.Light"> 
    <item name="colorControlNormal">@null</item> 
    <item name="colorControlActivated">@null</item>
    </style>
  5. 如何隐藏Android自带的顶部控制栏(尽量多种方法)

    1.requestWindowFeature(Window.FEATURE_NO_TITLE);

    2.themes

    <item name="android:windowNoTitle">true</item>
  6. 如何让界面上元素消失(尽量多种方法)

    1.android:visibility

  7. 使用ListView实现上下滑动

    ListView套在ScrollView里面就可以上下滑动

  8. 使用RecyclerView实现左右滑动

    1.写一个Adapter

    2..setOrientation(LinearLayoutManager.HORIZONTAL);

    设置一下布局方向

  9. 使用ImageView加载本地图片(drawble下的第一个图片)

  10. 为Imageiew加载网络图片(若网络加载失败,失败图片显示为drawble下的第一个图片)网络图片地址:https://img-home.csdnimg.cn/images/20201124032506.png

      ImageView image1 = (ImageView) findViewById(R.id.iv1);  //获得ImageView对象
             /*为什么图片一定要转化为 Bitmap格式的!! */
            Bitmap bitmap = getLoacalBitmap("/sdcard/tubiao.jpg"); //从本地取图片(在cdcard中获取)  //
            image1 .setImageBitmap(bitmap); //设置Bitmap
    public static Bitmap getLoacalBitmap(String url) {
             try {
                  FileInputStream fis = new FileInputStream(url);
                  return BitmapFactory.decodeStream(fis);  ///把流转化为Bitmap图片        
    
               } catch (FileNotFoundException e) {
                  e.printStackTrace();
                  return null;
             }
        }
    Bitmap bitmap=getHttpBitmap("https://img-home.csdnimg.cn/images/20201124032506.png");  
    
                           //从网上取图片
            image1 .setImageBitmap(bitmap); //设置Bitmap
    public static Bitmap getHttpBitmap(String url) {
             URL myFileUrl = null;
             Bitmap bitmap = null;
             try {
                  myFileUrl = new URL(url);
             } catch (MalformedURLException e) {
                  e.printStackTrace();
             }
             try {
                  HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
                  conn.setConnectTimeout(0);
                  conn.setDoInput(true);
                  conn.connect();
                  InputStream is = conn.getInputStream();
                  bitmap = BitmapFactory.decodeStream(is);
                  is.close();
             } catch (IOException e) {
                  e.printStackTrace();
             }
             return bitmap;
        }
  11. res资源下的drawble和mipmap两者区别

    res 目录下面 mipmap 和 drawable 的区别也就是上面这个设置是否开启的区别。mipmap 目录下的图片默认 setHasMipMap 为 true,drawable 默认 setHasMipMap 为 false。 google 建议大家只把 app 的启动图标放在 mipmap 目录中,其他图片资源仍然放在 drawable 下面

  12. 如何在一个界面中引入另外一个绘制好的xml

    1.fragment

    2.

    <include android:id="@+id/included1"
           layout="@layout/anotherlayout" /> 
  13. 界面过长情况下,使用控件实现页面上下滚动效果

    1. <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
      
        <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">
      
         </LinearLayout>
       </ScrollView>
  14. 请尽量还原下图中的登陆模块:

    <TextView
           android:id="@+id/tv_title"
           android:layout_height="50dp"
           android:layout_width="match_parent"
           android:background="#33A0E3"
           android:text="登录"
           android:textColor="#fff"
           android:textSize="25sp"
           android:gravity="center"/>
        <EditText
            android:id="@+id/et_id"
            android:layout_height="50dp"
            android:layout_width="match_parent"
            android:hint="请输入账号(手机号)"
            android:inputType="phone"
            android:textColorHint="#95A1AA"
            android:layout_marginTop="40dp"
            android:background="#fff"
            android:drawableLeft="@drawable/id_pic"
            android:padding="2dp"
            />
        <EditText
            android:id="@+id/et_password"
            android:layout_height="50dp"
            android:layout_width="match_parent"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:textColorHint="#95A1AA"
            android:layout_marginTop="10dp"
            android:background="#fff"
            android:drawableLeft="@drawable/pw_pic"
            android:padding="2dp"
            />
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="5dp"
            android:padding="5dp">
            <TextView
                android:id="@+id/tv_2"
                android:layout_width="60dp"
                android:layout_height="20dp"
                android:text="忘记密码"
                android:textColor="#33A0E3"/>
            <TextView
                android:id="@+id/tv_3"
                android:layout_width="match_parent"
                android:layout_height="20dp"
                android:text="注册"
                android:layout_toRightOf="@+id/tv_2"
                android:gravity="right"
                android:textColor="#33A0E3"/>
        </RelativeLayout>
        <Button
            android:id="@+id/btn_1"
            android:layout_width="300dp"
            android:layout_height="50dp"
            android:background="#33A0E3"
            android:text="登录"
            android:textColor="#fff"
            android:textSize="22sp"
            android:layout_gravity="center"/>

    image-20201217161247855

button1 = findViewById(R.id.btn_1);
        editText1 = findViewById(R.id.et_id);
        editText2 = findViewById(R.id.et_password);
        TextWatcher watcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                for (EditText et : new EditText[]{editText1,
                        editText2}) {
                    try {
                        Double.parseDouble(String.valueOf(et.getText()));
                    } catch (NumberFormatException e) {
                        // Disable button, show error label, etc.
                        button1.setEnabled(false);
                        return;
                    }
                }
                button1.setEnabled(true);
                //button1.setBackgroundColor(Color.parseColor("#F8F8FF"));
            }
        };
         editText1.addTextChangedListener(watcher);
        editText2.addTextChangedListener(watcher);
Chenille-Chan commented 3 years ago

Java部分:

  1. 简述抽象类和接口区别

    一个类只能继承一个抽象类,可以继承多个接口

  2. java中赋值操作部分,哪些属于浅拷贝,哪些为深拷贝

    浅拷贝:基本数据类型拷贝数值,将一个对象的引用赋值给另一个对象

    深拷贝:基本数据类型拷贝数值,将一个对象的内容全部赋值给另一个对象

  3. 尽量使用多种方式创建java对象(能写多少写多少)

    (1)Student st1=new Student();

  4. 简述“equals”与“==”、“hashCode”的区别和使用场景

    equals为true代表两个对象有相同的引用

    “==”为true代表两个对象有相同的内容

    两个对象的equals相同=>两个对象的hashcode相同

    两个对象的hashcode不相同=>两个对象的equals不相同

  5. 实现一个自己的Map类

  6. 用java实现冒泡排序

        int[] a=new int[10];
        Scanner input=new Scanner(System.in);
        for(int i=0;i<10;i++){
        a[i]=input.nextInt();}
        for(int j=0;j<9;j++){
        for(int i=0;i<9-j;i++){
        if(a[i+1]<a[i]){
            int temp=a[i];a[i]=a[i+1];a[i+1]=a[i];
        }}}
        for(int i=0;i<10;i++){
            System.out.println(a[i]+" ");
        }
    

Android UI部分:

  1. 如何获取View的宽高

     public void onWindowFocusChanged(boolean hasWindowFocus) {
           super.onWindowFocusChanged(hasWindowFocus);
           if(hasWindowFocus){
               int width = view.getMeasuredWidth();
               int height = view.getMeasuredHeight();
           }
       }
  2. 不使用Button组件,通过TextView和View完成Button的样式及点击功能。(要求长度40dp、宽度20dp,居中,字体大小为10dp,其余无硬性要求)

    <TextView
           android:layout_marginTop="20dp"
           android:layout_width="40dp"
           android:layout_height="20dp"
           android:text="按"
           android:textSize="10dp"
           android:gravity="center"
           android:background="#DCDCDC"
           />
    
    tv1=findViewById(R.id.tv1);
           tv1.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   Intent intent=new Intent(tv1_Activity.this,tv1_tv1Activity.class);
                   startActivity(intent);
    
               }
           });            
  3. 使用Toast弹出消息(尽量多种方法)

    在layout中设置 onClick=“showToast”

    public void showToast(){
          Toast.makeText(this,"Button被点击了",Toast.LENGTH_SHORT).show();
      }
  4. 使用EditView编写密码框(上限10个字数,无下划线,背景为红色)

    <EditText
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:background="#FF0000"
       android:hint="密码"
       android:textSize="10sp"
       android:inputType="textPassword"
       />
  5. 如何隐藏Android自带的顶部控制栏(尽量多种方法)

    在manifest中添加如下

    android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"
  6. 如何让界面上元素消失(尽量多种方法)

    局中设置控件为android:visibility

    在程序中可用setVisibility(View.GONE);

  7. 使用ListView实现上下滑动

    在布局中将listview放在ScrollView下

  8. 使用RecyclerView实现左右滑动

  9. 使用ImageView加载本地图片(drawble下的第一个图片)

    `

  10. 为Imageiew加载网络图片(若网络加载失败,失败图片显示为drawble下的第一个图片)网络图片地址:https://img-home.csdnimg.cn/images/20201124032506.png

    (1)在github上搜索glide,打开bumptech/glide

    (2)在AS的build.gradle中添加对应的代码

    (3)在manifast中添加

    (4)用法

    ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
    
      Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
  11. res资源下的drawble和mipmap两者区别

    mipmap仅仅用于应用启动图标,可以根据不同分辨率进行优化。其他的图标资源,还是要放到drawable文件夹中。

  12. 如何在一个界面中引入另外一个绘制好的xml

    <include layout="@layout/personal_center"/>
  13. 界面过长情况下,使用控件实现页面上下滚动效果

    <ScrollView/>

  14. 请尽量还原下图中的登陆模块:

    image-20201217174040981

Chenille-Chan commented 3 years ago

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

<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <View android:layout_width="match_parent" android:layout_height="100dp" android:background="#00BFFF"/> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="登录" android:textSize="30sp" android:gravity="center" android:textColor="#ffffff"/> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#F8F8FF" android:orientation="vertical"> <EditText android:id="@+id/ext_username" android:layout_marginTop="70dp" android:layout_width="match_parent" android:layout_height="50dp" android:padding="5dp" android:background="#ffffff" android:hint="请输入账号(手机号)" android:inputType="number" android:textColor="#000000"/> <EditText android:id="@+id/ext_password" android:layout_width="match_parent" android:layout_height="50dp" android:background="#ffffff" android:padding="5dp" android:hint="请输入密码" android:inputType="textPassword" android:textColor="#000000"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="忘记密码"
        android:textColor="#00BFFF"
        android:textSize="16sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="300dp"
        android:text="注册"
        android:textColor="#00BFFF"
        android:textSize="16sp" />

</LinearLayout>
<Button
    android:id="@+id/bt_denglu"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginTop="50dp"
    android:layout_marginLeft="7dp"
    android:layout_marginRight="7dp"
    android:text="登录"
    android:textColor="#ffffff"
    android:background="@drawable/bg_bt_denglu"
    />