forked from pvqcyimsk/gitproject
parent
77e47bdbdf
commit
dc6c5d2ffa
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,6 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<<<<<<< HEAD
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
=======
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
>>>>>>> dc8dfd73a8a58508fec99a79684ba5574328c7e7
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,15 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="11" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
<option name="id" value="Android" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RenderSettings">
|
||||
<option name="showDecorations" value="true" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1 @@
|
||||
/build
|
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
<option name="id" value="Android" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,39 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
|
||||
#-dontoptimize
|
||||
#-ignorewarnings
|
||||
#-keeppackagenames com.baidu.**
|
||||
#-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
|
||||
|
||||
#-dontwarn com.baidu.**
|
||||
#-dontwarn com.baidu.navisdk.**
|
||||
#-dontwarn com.baidu.navi.**
|
||||
|
||||
#-keep class com.baidu.** { *; }
|
||||
#-keep interface com.baidu.** { *; }
|
||||
|
||||
#-keep class vi.com.gdi.** { *; }
|
||||
|
||||
#-dontwarn com.google.protobuf.**
|
||||
#-keep class com.google.protobuf.** { *;}
|
||||
#-keep interface com.google.protobuf.** { *;}
|
@ -0,0 +1,224 @@
|
||||
package com.example.myapplication;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.baidu.mapapi.bikenavi.BikeNavigateHelper;
|
||||
import com.baidu.mapapi.walknavi.adapter.IWRoutePlanListener;
|
||||
import com.baidu.mapapi.walknavi.model.WalkRoutePlanError;
|
||||
import com.baidu.mapapi.walknavi.params.*;
|
||||
import com.baidu.mapapi.CoordType;
|
||||
import com.baidu.mapapi.SDKInitializer;
|
||||
import com.baidu.mapapi.model.LatLng;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import com.baidu.baidunavis.BaiduNaviParams;
|
||||
import com.baidu.mapapi.SDKInitializer;
|
||||
import com.baidu.mapapi.map.MapView;
|
||||
import com.baidu.mapapi.model.LatLng;
|
||||
import com.baidu.mapapi.walknavi.WalkNavigateHelper;
|
||||
import com.baidu.mapapi.walknavi.adapter.IWEngineInitListener;
|
||||
import com.baidu.mapapi.walknavi.params.WalkNaviLaunchParam;
|
||||
|
||||
public class itemfound extends AppCompatActivity {
|
||||
private WalkNavigateHelper helper = null;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
//initPermissions(); // 初始化权限
|
||||
setContentView(R.layout.activity_itemfound); // 填充视图
|
||||
|
||||
// 点击按钮开始导航
|
||||
Button imageButton = findViewById(R.id.button_item_keys);
|
||||
imageButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
// 初始化步行导航
|
||||
startBikeNavi();
|
||||
}
|
||||
});
|
||||
Button imageButtonwallet = findViewById(R.id.button_item_wallet);
|
||||
imageButtonwallet.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
// 初始化步行导航
|
||||
startBikeNavi();
|
||||
}
|
||||
});
|
||||
}
|
||||
// 初始化权限
|
||||
/*
|
||||
private void initPermissions() {
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
ArrayList<String> permissionsList = new ArrayList<>();
|
||||
String[] permissions = {
|
||||
Manifest.permission.ACCESS_NETWORK_STATE,
|
||||
Manifest.permission.INTERNET,
|
||||
Manifest.permission.ACCESS_COARSE_LOCATION,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
};
|
||||
|
||||
for (String perm : permissions) {
|
||||
if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(perm)) {
|
||||
permissionsList.add(perm);
|
||||
// 进入到这里代表没有权限.
|
||||
}
|
||||
if (!permissionsList.isEmpty()) {
|
||||
String[] strings = new String[permissionsList.size()];
|
||||
requestPermissions(permissionsList.toArray(strings), 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}*/
|
||||
private void startBikeNavi() {
|
||||
//Log.d("=========", "startBikeNavi");
|
||||
try {
|
||||
helper = WalkNavigateHelper.getInstance();
|
||||
helper.initNaviEngine(this, new IWEngineInitListener() {
|
||||
@Override
|
||||
public void engineInitSuccess() {
|
||||
// Log.d("=========", "BikeNavi engineInitSuccess引擎初始化成功");
|
||||
startWebNavi();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void engineInitFail() {
|
||||
// Log.d("=========", "BikeNavi engineInitFail");
|
||||
BikeNavigateHelper.getInstance().unInitNaviEngine();
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
// Log.d("=========", "startBikeNavi Exception");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
private void startWebNavi() {
|
||||
//起终点位置
|
||||
LatLng walkStartNode = new LatLng(39.110132, 117.358512);
|
||||
LatLng walkEndNode = new LatLng(39.111348, 117.358940);
|
||||
|
||||
WalkRouteNodeInfo startNode = new WalkRouteNodeInfo();
|
||||
startNode.setLocation(walkStartNode);
|
||||
WalkRouteNodeInfo endNode = new WalkRouteNodeInfo();
|
||||
endNode.setLocation(walkEndNode);
|
||||
// 官网
|
||||
//构造WalkNaviLaunchParam
|
||||
WalkNaviLaunchParam walkParam = new WalkNaviLaunchParam().startNodeInfo(startNode).endNodeInfo(endNode);
|
||||
//获取WalkNavigateHelper实例 //发起算路
|
||||
helper.routePlanWithRouteNode(walkParam, new IWRoutePlanListener() {
|
||||
@Override
|
||||
public void onRoutePlanStart() {
|
||||
// Log.d("=======", "WalkNavi onRoutePlanStart开始步行导航");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoutePlanSuccess() {
|
||||
// Log.d("========", "onRoutePlanSuccess算路成功");
|
||||
Intent intent = new Intent(itemfound.this,WNaviGuideActivity.class);
|
||||
// intent.setClass(getContext(), WNaviGuideActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoutePlanFail(WalkRoutePlanError error) {
|
||||
// Log.d("Walk", "WalkNavi onRoutePlanFail");
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_itemfound);
|
||||
Button find_wallet=findViewById(R.id.button_item_wallet);
|
||||
Button find_keys=findViewById(R.id.button_item_keys);
|
||||
find_wallet.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {//Intent
|
||||
double locationX;
|
||||
double locationy;
|
||||
//BaiduMapNavigation
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
find_keys.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {//Intent
|
||||
//NaviParaOption para=new Navi();
|
||||
|
||||
}
|
||||
});
|
||||
}*/ private void startBikeNavi1() {
|
||||
//Log.d("=========", "startBikeNavi");
|
||||
try {
|
||||
helper = WalkNavigateHelper.getInstance();
|
||||
helper.initNaviEngine(this, new IWEngineInitListener() {
|
||||
@Override
|
||||
public void engineInitSuccess() {
|
||||
// Log.d("=========", "BikeNavi engineInitSuccess引擎初始化成功");
|
||||
startWebNavi1();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void engineInitFail() {
|
||||
// Log.d("=========", "BikeNavi engineInitFail");
|
||||
BikeNavigateHelper.getInstance().unInitNaviEngine();
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
// Log.d("=========", "startBikeNavi Exception");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
private void startWebNavi1() {
|
||||
//起终点位置
|
||||
LatLng walkStartNode = new LatLng(39.110132, 117.358512);
|
||||
LatLng walkEndNode = new LatLng(39.112286, 117.359619);
|
||||
|
||||
WalkRouteNodeInfo startNode = new WalkRouteNodeInfo();
|
||||
startNode.setLocation(walkStartNode);
|
||||
WalkRouteNodeInfo endNode = new WalkRouteNodeInfo();
|
||||
endNode.setLocation(walkEndNode);
|
||||
// 官网
|
||||
//构造WalkNaviLaunchParam
|
||||
WalkNaviLaunchParam walkParam = new WalkNaviLaunchParam().startNodeInfo(startNode).endNodeInfo(endNode);
|
||||
//获取WalkNavigateHelper实例 //发起算路
|
||||
helper.routePlanWithRouteNode(walkParam, new IWRoutePlanListener() {
|
||||
@Override
|
||||
public void onRoutePlanStart() {
|
||||
// Log.d("=======", "WalkNavi onRoutePlanStart开始步行导航");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoutePlanSuccess() {
|
||||
// Log.d("========", "onRoutePlanSuccess算路成功");
|
||||
Intent intent = new Intent(itemfound.this,WNaviGuideActivity.class);
|
||||
// intent.setClass(getContext(), WNaviGuideActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoutePlanFail(WalkRoutePlanError error) {
|
||||
// Log.d("Walk", "WalkNavi onRoutePlanFail");
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
|
||||
public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
private static final int VERSION = 1;
|
||||
private static final String NAME = "weather";
|
||||
|
||||
public DatabaseHelper(Context context){
|
||||
super(context,NAME,null,VERSION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(SQLiteDatabase db) {
|
||||
db.execSQL("create table weather (_id INTEGER PRIMARY KEY AUTOINCREMENT,date text,max_temp text,min_temp text,text text,humidity text,pressure text,wind text,icon text)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
import com.example.myapplication.R;
|
||||
import com.example.myapplication.weather.SingleFragmentActivity;
|
||||
import com.example.myapplication.weather.WeatherFragment;
|
||||
|
||||
public class MainActivity1 extends SingleFragmentActivity implements WeatherFragment.Callbacks{
|
||||
@Override
|
||||
protected Fragment createFragment() {
|
||||
return WeatherFragment.newInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_masterdetail;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getFragmentId() {
|
||||
return R.id.fragment_container;
|
||||
}
|
||||
|
||||
public void onWeatherSelected(WeatherItem weatherItem){ //平板中选中天气
|
||||
if(findViewById(R.id.detail_container)==null){
|
||||
Intent intent = WeatherDetailActivity.newIntent(this,weatherItem);
|
||||
startActivity(intent);
|
||||
}else{
|
||||
Fragment newDetail = WeatherDetailFragment.newInstance(weatherItem);
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.replace(R.id.detail_container,newDetail)
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.IntentService;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import com.example.myapplication.R;
|
||||
import com.example.myapplication.weather.WeatherFragment;
|
||||
|
||||
public class NotificationService extends IntentService {
|
||||
private static final String TAG = "NotificationService";
|
||||
|
||||
private static final int NOTIFICATION_INTERVAL = 1000*60;
|
||||
|
||||
public static Intent newIntent(Context context){
|
||||
return new Intent(context,NotificationService.class);
|
||||
}
|
||||
|
||||
public NotificationService(){
|
||||
super(TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHandleIntent(@Nullable Intent intent) {
|
||||
Log.i(TAG,"Intent there");
|
||||
|
||||
Intent i = WeatherFragment.newIntent(this);
|
||||
PendingIntent pi = PendingIntent.getService(this,0,i,0);
|
||||
|
||||
Notification notification = null;
|
||||
SharedPreferences pref = this.getSharedPreferences("setting",Context.MODE_PRIVATE);
|
||||
String unit = pref.getString("unit","摄氏度");
|
||||
String unit_text = "°";
|
||||
if (unit == "华氏度"){
|
||||
unit_text = "℉";
|
||||
}
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
|
||||
.setTicker("ticker")
|
||||
.setSmallIcon(R.drawable.a100)
|
||||
.setContentTitle("今日天气")
|
||||
.setContentText(pref.getString("city","北京")+
|
||||
" 天气:"+pref.getString("text","")+
|
||||
", 最高温度:"+pref.getString("max_temp","")+unit_text+
|
||||
", 最低温度:"+pref.getString("min_temp","")+unit_text)
|
||||
.setContentIntent(pi)
|
||||
.setAutoCancel(true);
|
||||
|
||||
NotificationManager notificationManager =(NotificationManager)
|
||||
getSystemService(NOTIFICATION_SERVICE);
|
||||
|
||||
//一定要设置channel
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel = new NotificationChannel("to-do"
|
||||
, "待办消息",
|
||||
NotificationManager.IMPORTANCE_HIGH);
|
||||
channel.enableVibration(true);
|
||||
channel.setVibrationPattern(new long[]{500});
|
||||
notificationManager.createNotificationChannel(channel);
|
||||
builder.setChannelId("to-do");
|
||||
notification = builder.build();
|
||||
} else {
|
||||
notification = builder.build();
|
||||
}
|
||||
|
||||
notificationManager.notify(0,notification);
|
||||
System.out.println(notification);
|
||||
}
|
||||
|
||||
public static void setServiceAlarm(Context context,boolean isOn){
|
||||
Intent i = NotificationService.newIntent(context);
|
||||
PendingIntent pi = PendingIntent.getService(context,0,i,0);
|
||||
|
||||
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
|
||||
if(isOn){
|
||||
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
|
||||
NOTIFICATION_INTERVAL,pi);
|
||||
}else{
|
||||
alarmManager.cancel(pi);
|
||||
pi.cancel();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.example.myapplication.R;
|
||||
|
||||
public class SettingActivity extends AppCompatActivity {
|
||||
private EditText location;
|
||||
private TextView unit_text;
|
||||
private TextView send_text;
|
||||
private LinearLayout page;
|
||||
private LinearLayout unit;
|
||||
private LinearLayout send;
|
||||
private String city;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_setting);
|
||||
|
||||
location = (EditText) findViewById(R.id.location);
|
||||
unit = (LinearLayout)findViewById(R.id.unit);
|
||||
page = (LinearLayout)findViewById(R.id.page);
|
||||
unit_text = (TextView)findViewById(R.id.unit_text);
|
||||
send = (LinearLayout)findViewById(R.id.send);
|
||||
send_text = (TextView)findViewById(R.id.send_text);
|
||||
|
||||
SharedPreferences pref = getSharedPreferences("setting",MODE_PRIVATE);
|
||||
location.setText(pref.getString("city","北京"));
|
||||
unit_text.setText(pref.getString("unit","摄氏度"));
|
||||
send_text.setText(pref.getString("send","是"));
|
||||
|
||||
page.setOnClickListener(new View.OnClickListener(){
|
||||
public void onClick(View v){
|
||||
location.clearFocus();
|
||||
}
|
||||
});
|
||||
|
||||
location.addTextChangedListener(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) {
|
||||
city = s.toString();
|
||||
SharedPreferences.Editor editor = getSharedPreferences("setting",MODE_PRIVATE).edit();
|
||||
editor.putString("city",city);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
unit.setOnClickListener(new View.OnClickListener(){
|
||||
public void onClick(View v){
|
||||
click();
|
||||
}
|
||||
});
|
||||
|
||||
send.setOnClickListener(new View.OnClickListener(){
|
||||
public void onClick(View v){
|
||||
click2();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//点击按钮弹出一个单选对话框
|
||||
public void click() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle("请选择温度单位");
|
||||
final String items[] = {"摄氏度","华氏度"};
|
||||
|
||||
//-1代表没有条目被选中
|
||||
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
//1.把选中的条目取出来
|
||||
String item = items[which];
|
||||
Toast.makeText(getApplicationContext(),item.toString(),Toast.LENGTH_LONG).show();
|
||||
unit_text.setText(item.toString());
|
||||
SharedPreferences.Editor editor = getSharedPreferences("setting",MODE_PRIVATE).edit();
|
||||
editor.putString("unit",item.toString());
|
||||
editor.commit();
|
||||
//2.然后把对话框关闭
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
//一样要show
|
||||
builder.show();
|
||||
}
|
||||
|
||||
public void click2() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle("请选择是否开启通知");
|
||||
final String items[] = {"是","否"};
|
||||
|
||||
//-1代表没有条目被选中
|
||||
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
//1.把选中的条目取出来
|
||||
String item = items[which];
|
||||
Toast.makeText(getApplicationContext(),item.toString(),Toast.LENGTH_LONG).show();
|
||||
send_text.setText(item.toString());
|
||||
SharedPreferences.Editor editor = getSharedPreferences("setting",MODE_PRIVATE).edit();
|
||||
editor.putString("send",item.toString());
|
||||
editor.commit();
|
||||
//2.然后把对话框关闭
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
//一样要show
|
||||
builder.show();
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
public abstract class SingleFragmentActivity extends AppCompatActivity {
|
||||
protected abstract Fragment createFragment();
|
||||
protected abstract int getLayoutId();
|
||||
protected abstract int getFragmentId();
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(getLayoutId());
|
||||
|
||||
FragmentManager fm = getSupportFragmentManager();
|
||||
Fragment fragment = fm.findFragmentById(getFragmentId());
|
||||
|
||||
if(fragment == null){
|
||||
fragment = createFragment();
|
||||
fm.beginTransaction().
|
||||
add(getFragmentId(),fragment)
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.example.myapplication.R;
|
||||
|
||||
public class WeatherDetailActivity extends SingleFragmentActivity{
|
||||
public static final String EXTRA_WEATHER_ITEM = "com.example.weather.weatherItem";
|
||||
|
||||
@Override
|
||||
protected Fragment createFragment() {
|
||||
WeatherItem weatherItem = (WeatherItem)getIntent().getSerializableExtra(EXTRA_WEATHER_ITEM);
|
||||
return WeatherDetailFragment.newInstance(weatherItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_detail;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getFragmentId() {
|
||||
return R.id.detail_container;
|
||||
}
|
||||
|
||||
public static Intent newIntent(Context packageContext, WeatherItem weatherItem){
|
||||
Intent intent = new Intent(packageContext,WeatherDetailActivity.class);
|
||||
intent.putExtra(EXTRA_WEATHER_ITEM,weatherItem);
|
||||
return intent;
|
||||
}
|
||||
}
|
@ -0,0 +1,133 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.example.myapplication.R;
|
||||
|
||||
public class WeatherDetailFragment extends Fragment {
|
||||
private WeatherItem mWeatherItem; //用来设置UI
|
||||
|
||||
private TextView mDeatilDate;
|
||||
private TextView mDetailMaxTemp;
|
||||
private TextView mDetailMinTemp;
|
||||
private ImageView mDetialIcon;
|
||||
private TextView mDetailDesc;
|
||||
private TextView mDetailHumidity;
|
||||
private TextView mDetailPressure;
|
||||
private TextView mDetailWind;
|
||||
|
||||
private static final String TAG = "WeatherDetailFragment";
|
||||
private static final String ARG_ITEM = "args_item";
|
||||
private String unit_text = "°";
|
||||
|
||||
public static WeatherDetailFragment newInstance(WeatherItem weatherItem) {
|
||||
Bundle args = new Bundle();
|
||||
args.putSerializable(ARG_ITEM,weatherItem);
|
||||
WeatherDetailFragment fragment = new WeatherDetailFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
//获取drawable图标资源的id
|
||||
public int getIconId(Context mContext, String icon){
|
||||
int i= getResources().getIdentifier(icon, "drawable", mContext.getPackageName()) ;
|
||||
if(i>0){
|
||||
Log.i(TAG,"Success to get drawable resoure");
|
||||
}else{
|
||||
Log.i(TAG,"Fail to get drawable resoure");
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
mWeatherItem = (WeatherItem) getArguments().getSerializable(ARG_ITEM);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
View v = inflater.inflate(R.layout.fragment_weather_detail,container,false);
|
||||
if(getActivity().getSharedPreferences("setting",Context.MODE_PRIVATE).getString("unit","摄氏度")=="华氏度"){
|
||||
unit_text = "℉";
|
||||
}
|
||||
|
||||
mDeatilDate = (TextView) v.findViewById(R.id.detail_date);
|
||||
mDetailMaxTemp = (TextView) v.findViewById(R.id.detail_max_temp);
|
||||
mDetailMinTemp = (TextView) v.findViewById(R.id.detail_min_temp);
|
||||
mDetialIcon = (ImageView) v.findViewById(R.id.detail_icon);
|
||||
mDetailHumidity = (TextView) v.findViewById(R.id.detail_humidity);
|
||||
mDetailPressure = (TextView) v.findViewById(R.id.detail_pressure);
|
||||
mDetailWind = (TextView) v.findViewById(R.id.detail_wind);
|
||||
mDetailDesc = (TextView) v.findViewById(R.id.detail_desc);
|
||||
|
||||
mDeatilDate.setText(mWeatherItem.getData());
|
||||
mDetailMaxTemp.setText(mWeatherItem.getMax_temp()+unit_text);
|
||||
mDetailMinTemp.setText(mWeatherItem.getMin_temp()+unit_text);
|
||||
String icon = "a"+mWeatherItem.getIcon();
|
||||
int id = getIconId(getContext(),icon);
|
||||
Drawable drawable = getResources().getDrawable(id);
|
||||
mDetialIcon.setImageDrawable(drawable);
|
||||
mDetailHumidity.setText("Humidity: "+mWeatherItem.getHumidity()+" %");
|
||||
mDetailPressure.setText("Pressure: "+mWeatherItem.getPressure()+" hPa");
|
||||
mDetailWind.setText("Wind: "+mWeatherItem.getWind()+" km/h SE");
|
||||
mDetailDesc.setText(mWeatherItem.getText());
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
public String createMessage(){
|
||||
String message = "";
|
||||
message += "今天的天气状况为:"+mWeatherItem.getText();
|
||||
message += " 今天的最高温度是: "+mWeatherItem.getMax_temp();
|
||||
message += " 今天的最低温度是: "+mWeatherItem.getMin_temp();
|
||||
message += " 今天的湿度为: "+mWeatherItem.getHumidity();
|
||||
message += " 今天的风速为:"+mWeatherItem.getWind();
|
||||
message += " 今天的气压为:"+mWeatherItem.getPressure();
|
||||
message += " 希望您拥有美好的一天!";
|
||||
return message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
if(getActivity().findViewById(R.id.fragment_container)==null){ //是手机模式
|
||||
inflater.inflate(R.menu.fragment_detail,menu);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
switch (item.getItemId()){
|
||||
case R.id.menu_setting:
|
||||
Intent intent = new Intent(getActivity(),SettingActivity.class);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.menu_share:
|
||||
Intent i = new Intent(Intent.ACTION_SEND);
|
||||
i.setType("text/plain");
|
||||
i.putExtra(Intent.EXTRA_TEXT,createMessage());
|
||||
startActivity(i);
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.example.myapplication.weather;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class WeatherItem implements Serializable {
|
||||
private String data; //天气日期
|
||||
private String max_temp; //最高温度
|
||||
private String min_temp; //最低温度
|
||||
private String text; //天气描述
|
||||
private String humidity; //适度
|
||||
private String pressure; //气压
|
||||
private String wind; //风力
|
||||
private String icon; //图标
|
||||
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public void setIcon(String icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public String getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(String data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getMax_temp() {
|
||||
return max_temp;
|
||||
}
|
||||
|
||||
public void setMax_temp(String max_temp) {
|
||||
this.max_temp = max_temp;
|
||||
}
|
||||
|
||||
public String getMin_temp() {
|
||||
return min_temp;
|
||||
}
|
||||
|
||||
public void setMin_temp(String min_temp) {
|
||||
this.min_temp = min_temp;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public String getHumidity() {
|
||||
return humidity;
|
||||
}
|
||||
|
||||
public void setHumidity(String humidity) {
|
||||
this.humidity = humidity;
|
||||
}
|
||||
|
||||
public String getPressure() {
|
||||
return pressure;
|
||||
}
|
||||
|
||||
public void setPressure(String pressure) {
|
||||
this.pressure = pressure;
|
||||
}
|
||||
|
||||
public String getWind() {
|
||||
return wind;
|
||||
}
|
||||
|
||||
public void setWind(String wind) {
|
||||
this.wind = wind;
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/detail_container"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/fragment_container"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/page">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Location"
|
||||
android:textSize="16dp"
|
||||
android:textColor="#333"/>
|
||||
<EditText
|
||||
android:id="@+id/location"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="请输入地理位置"
|
||||
android:textSize="13dp"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.8dp"
|
||||
android:background="#aaa"/>
|
||||
<LinearLayout
|
||||
android:id="@+id/unit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Unit"
|
||||
android:textSize="16dp"
|
||||
android:textColor="#333"/>
|
||||
<TextView
|
||||
android:id="@+id/unit_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="摄氏度"
|
||||
android:textSize="12dp"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.8dp"
|
||||
android:background="#aaa"/>
|
||||
<LinearLayout
|
||||
android:id="@+id/send"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="开启通知"
|
||||
android:textSize="16dp"
|
||||
android:textColor="#333"/>
|
||||
<TextView
|
||||
android:id="@+id/send_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="是"
|
||||
android:textSize="12dp"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.8dp"
|
||||
android:background="#aaa"/>
|
||||
</LinearLayout>
|
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/fragment_container"/>
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="3"
|
||||
android:id="@+id/detail_container"/>
|
||||
</LinearLayout>
|
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@color/blue">
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="20dp"
|
||||
android:gravity="top|center">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/today_time"
|
||||
android:text="Today,May 17"
|
||||
android:textColor="#fff"
|
||||
android:textSize="20dp"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/today_max_temp"
|
||||
android:text="26°"
|
||||
android:textColor="#fff"
|
||||
android:textSize="50dp"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/today_min_temp"
|
||||
android:text="14°"
|
||||
android:textColor="#fff"
|
||||
android:textSize="30dp"
|
||||
android:layout_marginTop="-5dp"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="top|center"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="10dp">
|
||||
<ImageView
|
||||
android:id="@+id/today_icon"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="120dp"
|
||||
android:src="@drawable/a100"
|
||||
android:padding="20dp"/>
|
||||
<TextView
|
||||
android:id="@+id/today_icon_desc"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#fff"
|
||||
android:textSize="25dp"
|
||||
android:text="Sun"
|
||||
android:layout_marginTop="-20dp"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="2"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/fragment_weather_recycler_view"/>
|
||||
</LinearLayout>
|
@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/detail_date"
|
||||
android:text="Tomorrow"
|
||||
android:textColor="#000"
|
||||
android:textSize="20dp"
|
||||
android:layout_margin="30dp"/>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="20dp">
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="25dp"
|
||||
android:gravity="top|center">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/detail_max_temp"
|
||||
android:text="26℉"
|
||||
android:textSize="50dp"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/detail_min_temp"
|
||||
android:text="14°"
|
||||
android:textSize="40dp"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="top|center"
|
||||
android:orientation="vertical">
|
||||
<ImageView
|
||||
android:id="@+id/detail_icon"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="150dp"
|
||||
android:src="@drawable/a100"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/detail_desc"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25dp"
|
||||
android:text="Sun"
|
||||
android:layout_marginTop="-10dp"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/detail_humidity"
|
||||
android:text="Humidity: 78 %"
|
||||
android:textColor="#000"
|
||||
android:textSize="20dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/detail_pressure"
|
||||
android:text="Pressure: 1018 hPa"
|
||||
android:textColor="#000"
|
||||
android:textSize="20dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginBottom="10dp" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/detail_wind"
|
||||
android:text="Wind: 3 km/h SE"
|
||||
android:textColor="#000"
|
||||
android:textSize="20dp"
|
||||
android:layout_marginLeft="15dp"/>
|
||||
</LinearLayout>
|
@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/weather_item"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_alignParentRight="true"
|
||||
android:gravity="top|center"
|
||||
android:padding="10dp">
|
||||
<TextView
|
||||
android:id="@+id/item_max_weather"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="27°"
|
||||
android:textSize="20dp"/>
|
||||
<TextView
|
||||
android:id="@+id/item_min_weather"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="16°"/>
|
||||
</LinearLayout>
|
||||
<ImageView
|
||||
android:id="@+id/item_icon"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:src="@drawable/a100"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_marginTop="10dp"
|
||||
/>
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_toRightOf="@id/item_icon"
|
||||
android:padding="10dp">
|
||||
<TextView
|
||||
android:id="@+id/item_date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Tomorrow"
|
||||
android:textSize="20dp"/>
|
||||
<TextView
|
||||
android:id="@+id/item_desc"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Sun"
|
||||
android:textSize="18dp"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue