一、本篇简介
Android studio用以实现安卓页面开发,而其软件的可操作性强,功能强大,所以初学者摸索的时候很容易晕头转向。下文根据简单的三个案例来了解Android-studio的部分功能,指出一些可能的错误,以希望能够对大家有所助益,提升个人能力,优化设计界面!
二、获取显示的数据项
2.1预期目标
界面在不跳转的前提下在当前页面可以实现遴选,遴选项出现在目标位置。
2.2实现途径
2.2.1spinner控件
控件特点
Spinner的数据通常需要通过一个Adapter来提供,这是因为Spinner本身不存储数据,而是通过Adapter来获取要显示的数据项。
2.3实现方法
2.3.1manifests目录
如果修改默认java的运行文件,需要在这里做同步修改,其他地方不动
<activity
android:name=".SpinnerTestActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2.3.2java目录(当前所在包)
当前所在包查看方式:Android 02为当前所在包
创建一个SpinnerTestActivity.java文件(名字任意),内部代码如下:
package com.example.android02;
import android.os.Bundle;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class SpinnerTestActivity extends AppCompatActivity {
private Spinner spinner;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.week7_activity_spinner_test);
//此处对应的是以上layout文件下的xml文件
spinner = findViewById(R.id.feature_spinner);
textView = findViewById(R.id.content_text);
findViewById(R.id.language_btn).setOnClickListener(v -> {
String text = "Select Language is " +
getResources()
.getStringArray(R.array.languages)
[spinner.getSelectedItemPosition()];
textView.setText(text);
});
}
}
2.3.3layout目录
创建一个week7_activity_spinner_test.xml(名字任意)文件,内部代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SpinnerTestActivity" >
//xml文件与目标java文件在此处需要对应,
//在此xml文件中目标java文件名为SpinnerTestActivity
<Spinner
android:id="@+id/feature_spinner"
android:layout_width="406dp"
android:layout_height="83dp"
android:layout_marginStart="4dp"
android:entries="@array/feature"
android:minHeight="32dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/language_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="Languages"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/feature_spinner"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/content_text"
android:layout_width="406dp"
android:layout_height="66dp"
android:layout_marginStart="4dp"
android:text="Select and Click"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/language_btn"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.3.4values目录
languages(java文件内)和feature(xml文件内)需要在array.xml文件中定义,否则将报错。
新建一个array.xml,内部代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="feature">
<item>zhuozi</item>
<item>pingguo</item>
<item>dangao</item>
<item>maoyi</item>
<item>mihoutao</item>
</string-array>
<string-array name="languages">
<item>english</item>
<item>chinese</item>
<item>french</item>
</string-array>
</resources>
2.3.5文件位置
2.4实现效果
左边为初始状态,第一行小三角修改栏目内容,点击language修改内容,显示在最下方黑字
三、不同项目信息调度到同一页面显示
3.1预期目标
现有未知数目的商品需要集中显示到页面,要求目录随商品数目变化。(需要list表来修饰xml文件)
3.2实现途径
3.2.1listview控件
控件特点
Android开发中用于展示垂直滚动列表的控件。ListView是一个功能强大的列表控件,它可以帮助开发者在Android应用中以不同的方式来展示和管理大量的数据。通过学习和掌握ListView的使用,开发者可以为用户提供更加丰富和便捷的界面体验。
控件里的内容格式则用一个新的list.xml文件补充。
3.3实现方法
3.3.1manifests目录
、同第一个项目一样同步修改
<activity
android:name=".ShoppingActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ShoppingList"
android:exported="true">
</activity>
3.3.2java目录
创建一个ShoppingList.java文件,一个ShoppingActivity.java文件(名字任意,但对应关系不能混乱),内部代码如下:
ShoppingActivity.java文件
package com.example.android02;
import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
public class ShoppingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.week7_activity_shopping);
((ListView) findViewById(R.id.shopping_list))
.setAdapter(new ShoppingList(this));
}
}
ShoppingList.java文件:
package com.example.android02;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ShoppingList extends BaseAdapter {
private int count = 5;
private String[] titles = {"桌子", "苹果", "蛋糕", "毛衣", "猕猴桃"};
private String[] prices = {"1800 元", "10 元/kg", "300 元", "350 元", "15 元/kg"};
private int[] icons = {
R.drawable.zhuozi,
R.drawable.pingguo,
R.drawable.dangao,
R.drawable.maoyi,
R.drawable.mihoutao
};
private Context context;
public ShoppingList(Context context) {
this.context = context;
}
@Override
public int getCount() {
return titles.length;
}
@Override
public Object getItem(int i) {
return titles[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup)
{
View myView = View.inflate(context, R.layout.week7_activity_shopping_list, null);
((ImageView) myView.findViewById(R.id.shopping_image))
.setImageResource(icons[i]);
((TextView) myView.findViewById(R.id.shopping_name))
.setText(titles[i]);
((TextView) myView.findViewById(R.id.shopping_price))
.setText(prices[i]);
return myView;
}
}
3.3.3layout目录
创建一个week7_activity_shopping_list.xml文件,一个week7_activity_shopping.xml文件(名字任意,但对应关系不能混乱),内部代码如下:
week7_activity_shopping_list.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<ImageView
android:id="@+id/shopping_image"
android:layout_width="120dp"
android:layout_height="90dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="90dp"
app:layout_constraintStart_toEndOf="@id/shopping_image"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="10dp"
android:orientation="vertical"
android:gravity="center" >
<TextView
android:id="@+id/shopping_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:textColor="#2909E1"
android:text="商品名称"
/>
<TextView
android:id="@+id/shopping_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_gravity="left"
android:textColor="#2909E1"
android:text="价格"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
week7_activity_shopping.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ShoppingActivity" >
<TextView
android:id="@+id/shopping_title"
android:layout_width="match_parent"
android:layout_height="30dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:gravity="center" android:background="#09BDD5"
android:textColor="#815F5F" android:text="购物商城"
/>
<ListView
android:id="@+id/shopping_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="30dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/shopping_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
3.3.4drawable目录
(java文件内)可能出现的报错位置:
private int[] icons = {
R.drawable.zhuozi,
R.drawable.pingguo,
R.drawable.dangao,
R.drawable.maoyi,
R.drawable.mihoutao
};
需要对drawable目录添加该命名下的图片数据(文章末尾附有图片数据可自行下载)
3.3.5文件位置
3.4实现效果
左边为初始状态,第一行小三角修改栏目内容,点击language修改内容,显示在最下方黑字
四、实现页面间跳转及信息共享
4.1预期目标
在以上两个实验的基础上实现功能的整合,即非页面跳转的信息遴选,选择后页面的跳转及信息的共享。
4.2实现途径
整合以上两个实验的要点
4.3实现方法
4.3.1manifests目录
如果修改默认java的运行文件,需要在这里做同步修改,其他地方不动
<activity
android:name=".CommodityActivity"
android:exported="true">
</activity>
<activity
android:name=".Commodity"
android:exported="true">
</activity>
<activity
android:name=".CoffeeStoreActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".CoffeeStore2Activity"
android:exported="true">
</activity>
4.3.2java目录
创建一个CoffeeStoreActivity.java文件,一个CoffeeStore2Activity.java文件,一个CommodityActivity.java文件,一个Commodity.java文件(名字任意,但对应关系不能混乱),
CoffeeStoreActivity.java代码如下:
package com.example.android02;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Locale;
/**
* 第一个页面:ListView 内容默认(String.xml 中写死)
*/
public class CoffeeStoreActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.week7_activity_coffee_store);
// 列表元素点击事件:跳转到第二个页面
((ListView) findViewById(R.id.store_list))
.setOnItemClickListener((aV, v, i, l) -> {
Intent intent = new Intent(this, CoffeeStore2Activity.class);
intent.putExtra("arrName", aV.getItemAtPosition(i).toString().toLowerCase(Locale.ROOT));
startActivity(intent);
});
}
}
CoffeeStore2Activity.java代码如下:
package com.example.android02;
import android.content.Intent;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
/**
* 第二个页面,只有一个 ListView 内容根据 Intent 传入的 arrName 确定
* 具体商品信息在 Commodity 类中内置
*/
public class CoffeeStore2Activity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.week7_activity_coffee_store2);
String arrName = getIntent().getStringExtra("arrName");
listView = findViewById(R.id.num2_list);
// 自定义列表元素,使用自定义商品数据结构 Commodity ,列表显示内容与toString 方法有关
listView.setAdapter(new ArrayAdapter<>(this,
androidx.appcompat.R.layout.support_simple_spinner_dropdown_item,
Commodity.getArr(arrName)));
listView.setOnItemClickListener((aV, v, i, l) -> {
Commodity item = (Commodity)aV.getItemAtPosition(i);
Intent intent = new Intent(this, CommodityActivity.class);
intent.putExtra("name", item.getName());
intent.putExtra("desc", item.getDescription());
intent.putExtra("imgId", item.getImgId());
startActivity(intent);
});
}
}
Commodity.java代码如下:
package com.example.android02;
/**
* 商品信息自定义数据结构,用于点击后具体商品信息的展示
*/
public class Commodity {
private String name;
private String description;
private int imgId;
private static Commodity[] drinks = new Commodity[] {
new Commodity("Latte",
"Latte coffee is a classic blend of Espresso and milk.Italians also like latte as a breakfast drink.", R.drawable.latte),
new Commodity("Cappuccino",
"Cappuccino is a kind of Italian coffee mixed with the same amount of espresso and steam foam milk.", R.drawable.cappuccino),
new Commodity("Filter",
"Dripping coffee is usually brewed with a Hong Kong drip filter or an American drip filter", R.drawable.filter), };
private static Commodity[] food = new Commodity[] {
new Commodity("Bread",
"Bread is a kind of food made by grinding and heating grains (usually wheat).",
R.drawable.bread), new Commodity("Cake", "Cake is a kind of ancient pastry, which is generally made in an oven. The cake is mainly made of eggs, sugar and wheat flour.",
R.drawable.dangao), };
private static Commodity[] stores = new Commodity[] {
new Commodity("Mug",
"Mug is a kind of home-made cup, which is generallyused for hot drinks such as milk, coffee and tea.",
R.drawable.mug), new Commodity(
"Spoon",
"The spoon is mainly used to drink soup, and sometimes it can be used to hold slippery food.", R.drawable.spoon), };
public static Commodity[] getArr(String name) {
Commodity[] arr;
try {
arr = (Commodity[]) Commodity.class.getDeclaredField(name).get(null);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
return arr;
}
public Commodity(String name, String description, int imgId) {
this.name = name;
this.description = description;
this.imgId = imgId;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public int getImgId() {
return imgId;
}
@Override
public String toString() {
return this.name;
}
}
CommodityActivity.java代码如下:
package com.example.android02;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
/**
* 商品信息展示页面
*/
public class CommodityActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.week7_activity_commodity);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
String desc = intent.getStringExtra("desc");
int imgId = intent.getIntExtra("imgId", 0);
((ImageView) findViewById(R.id.commodity_img)).setImageResource(imgId);
((TextView) findViewById(R.id.commodity_name)).setText(name);
((TextView) findViewById(R.id.commodity_desc)).setText(desc);
}
}
4.3.3layout目录
创建一个week7_activity_coffee_store.xml文件,一个week7_activity_coffee_store2.xml文件,一个week7_activity_commodity.xml文件(名字任意,但对应关系不能混乱)
week7_activity_coffee_store.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CoffeeStoreActivity" >
<ImageView
android:id="@+id/store_image"
android:layout_width="411dp"
android:layout_height="223dp"
android:layout_marginTop="4dp"
android:src="@drawable/coffee_store"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ListView
android:id="@+id/store_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/store_image"
android:entries="@array/coffee_store"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
week7_activity_coffee_store2.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CoffeeStore2Activity" >
<ListView
android:id="@+id/num2_list"
android:layout_width="403dp"
android:layout_height="758dp"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
week7_activity_commodity.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CommodityActivity" >
<ImageView
android:id="@+id/commodity_img"
android:layout_width="419dp"
android:layout_height="209dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/commodity_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/commodity_img"
android:paddingBottom="5dp"
/>
<TextView
android:id="@+id/commodity_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/commodity_name"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
4.3.4drawable目录
以上页面也需要图片文件插入,需要对drawable目录添加该命名下的图片数据(文章末尾附有图片数据可自行下载)
4.3.5valus目录
照片文件有三种分类,如下,故在首页需要做出第一次的遴选,而同时需要在values的array.xml文件里添加如下数据:
</string-array>
<string-array name="coffee_store">
<item>drinks</item>
<item>food</item>
<item>stores</item>
</string-array>
4.4实现效果
左边为初始状态,第一行小三角修改栏目内容,点击language修改内容,显示在最下方黑字
五、结束
5.1结语
尽可能的还原了整个自己的实验流程,如果有存在一些逻辑上的问题,在感谢指出的同时,我也会修改。希望大家教学相长,都可以学到东西,感谢大家的喜欢!!!
5.2图片文件
(图片来源自网络,侵权删)