Android Studio(三)CriminalIntent—界面设计、显示列表

Android编程权威指南 第3版 第7、8章 学习总结
代码来源于《Android编程权威指南》第三版
14-4F-8A-A2-D1-90 60 3
14-4F-8A-A2-D1-90 60 4

CriminalIntent可用于详细记载办公室内的陋习,记录包括标题、日期和照片,支持在联系人中查找当事人,通过E-mail、twitter、Facebook或其他应用提出抗议。

一、记录明细界面设计

首先设计一个名为CrimeFragment的UI fragment来管理用户界面,再设计-一个名
为CrimeActivity的activity来托管CrimeF ragment实例。
可以这样理解托管: activity在其视图层级里提供- -处位置, 用来放置fragment视图,如下图所示。fragment本身没有在屏幕上显示视图的能力。因此,只有将它的视图放置在activity的视图层级结构中,fragment视图才 能显示在屏幕上。
在这里插入图片描述
Crime、CrimeFragment以及CrimeActivity是我们要开发的三个类。

CrimeActivity视图由FrameLayout组件组成,FrameLayout组件为CrimeFragment视图安排了显示位置。CrimeFragment视图由一个LinearLayout组件及其三个子视图组成。这三个子视图包括一个EditText组件、一个Button组件和一个CheckBox组件。CrimeFragment类中有存储它们的成员变量,并设有监听器,会响应用户操作时,更新模型层数据。

新建项目就不特别说明了,与之前GeoQuiz的新建相同,不清楚的可以看一下前一个博客。

添加依赖项

本文使用的Android Studio 4.1.1 Sdk 30已自动添加该项目所需要的依赖项,可省略此步骤,其他版本可以打开app/build.gradle文件,SDK 28及以下版本的看是否有这一行代码,没有就加上,然后进行同步。

compile 'com.android.support:appcompat-v7:25.0.3'//25.0.3为buildTools版本号

SDK 28以上版本的看是否有这一行代码,同样没有就加上,然后进行同步。

implementation 'androidx.appcompat:appcompat:1.2.0'

依赖项添加好后右键MainActivity,将其更名为CrimeActivity,并将其超类改为AppCompatActivity

创建Crime类

在包内新建一个Java Class,命名为Crime,单击OK,并为其添加如下代码

public class Crime {
   

    private UUID mId;
    private String mTitle;
    private Date mDate;
    private boolean mSolved;

    public Crime() {
   
        mId = UUID.randomUUID();
        mDate = new Date();
    }

UUID是Android框架里的Java工具类。有了它,产生唯- -ID值就方便多了。在构造方法里,调用UUID. randomUUID()产生一个随机唯一ID值。在导入Data类时选择java.utill.Data类。

配置Android Studio识别成员变量的m前缀,打开Android Studio首选项对话框( Mac用户选择Android Studio菜单, Windows用户选择File→Settings菜单)。依次展开Editor和ICode Style选项,在Java选项下选择Code Generation选项页。在Naming表单的Field- -行中, 添加m作为前缀,然后添加s作为Static field的前缀。在这里插入图片描述

接下来,为只读成员变量mId生成一个gtter方法, 为成员变量mTitle. mDate和mSolved生成getter方法和setter方法。右键单击构造方法下面的空白处,选择Generate… →Getter菜单项,然后选择mId变量。再选择Generea… →Getter and Setter为变量mTitle. mDate 和mSolved生成getter方法和setter方法
在这里插入图片描述
生成好后,如下图所示
在这里插入图片描述

UI Fragment

为托管UI fragment, activity必须 :
1.在其布局中为fragment的视图安排位置;
2.管理fragment实例的生命周期。

托管有两种方式:
1.在activity布局中添加fragment;
2.在activity代码中添加fragment。

我们选择跟为灵活的第二种:

1.首先定义CrimeActivity的布局,打开res/layout/activity_crime.xml
更换默认布局,代码如下

<FrameLayout android:id="@+id/fragment_container"
             xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />

2.打开res/values/strings.xml,添加需要的字符串资源

<resources>
    <string name="app_name">CriminalIntent</string>
    <string name="crime_title_hint">Enter a title for the crime.</string>
    <string name="crime_title_label">Title</string>
    <string name="crime_details_label">Details</string>
    <string name="crime_solved_label">Solved</string>
</resources>

3.然后是定义用户界面。CrimeFragment的视图布 局包含一个垂直LinearLayout组件,这个组件又含有5个子组件:两个TextView组件、一个EditText组件、一个Button组件和一个CheckBox组件。要创建布局文件,在项目工具窗口中,右键单击res/layout.文件夹,选择New→Layout resource file菜单项。命名布局文件为fragment.crime.xml。 输人LinearLayout作为根元素节点后,单击OK按钮完成创建。
新建文件打开后,查看XML,会发现向导已经添加了LinearLayout。手动添加其余组件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_margin="16dp"
              android:orientation="vertical">

    <TextView
        style="?android:listSeparatorTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/crime_title_label"/>

    <EditText
        android:id="@+id/crime_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/crime_title_hint"/>

    <TextView
        style="?android:listSeparatorTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/crime_details_label"/>

    <Button
        android:id="@+id/crime_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <CheckBox
        android:id="@+id/crime_solved"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/crime_solved_label"/>

</LinearLayout>

在这里插入图片描述

4.创建CrimeFragment类
在包内创建一个新的Java Class,命名为CrimeFragment,点击OK完成创建。修改代码,添加继承类Fragment。并导入支持库版的类

import android.support.v4.app.Fragment;//28版本以下
import androidx.fragment.app.Fragment;//28版本以上

为其创建一个新的crime

private</
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio设计界面显示信号强度的代码,可以通过以下步骤实现: 1. 在XML布局文件中添加一个TextView控件用于显示信号强度: ```xml <TextView android:id="@+id/signalStrengthTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Signal Strength: " android:textSize="16sp" /> ``` 2. 在Java代码中获取并更新信号强度的值,并将其显示在TextView上: ```java import android.telephony.PhoneStateListener; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView signalStrengthTextView; private TelephonyManager telephonyManager; private PhoneStateListener phoneStateListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); signalStrengthTextView = findViewById(R.id.signalStrengthTextView); telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); phoneStateListener = new PhoneStateListener() { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); int signalDbm = signalStrength.getDbm(); signalStrengthTextView.setText("Signal Strength: " + signalDbm + " dBm"); } }; telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); } @Override protected void onDestroy() { super.onDestroy(); telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); } } ``` 3. 确保在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` 以上代码通过使用TelephonyManager和PhoneStateListener来监听信号强度的变化,并将其更新到TextView上显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值