提交 a199b39e 编写于 作者: N NeroZhang

1.9.5

上级 264561f3
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
compileSdkVersion 28
defaultConfig {
applicationId "com.example.mockgps"
minSdkVersion 14
targetSdkVersion 27
targetSdkVersion 28
versionCode 1
versionName "1.9.4"
versionName "1.9.5"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
......@@ -38,13 +38,17 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation files('libs/BaiduLBS_Android.jar')
implementation files('libs/library-1.0.19.jar')
implementation 'com.android.support:cardview-v7:27.1.1'
// implementation files('com.android.volley:volley:1.1.1')
implementation 'com.android.support:cardview-v7:28.0.0'
implementation files('libs/log4j-1.2.17.jar')
}
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.9.4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.9.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
......@@ -13,7 +13,7 @@
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
......@@ -46,6 +46,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<service
android:name="com.baidu.location.f"
android:enabled="true"
......
package com.example.log4j;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Layout;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
import android.util.Log;
/**
* 源自 android-logging-log4j-1.0.3.jar
*
* @author Administrator
*/
public class LogCatAppender extends AppenderSkeleton {
protected Layout tagLayout;
public LogCatAppender(Layout messageLayout, Layout tagLayout) {
this.tagLayout = tagLayout;
setLayout(messageLayout);
}
public LogCatAppender(Layout messageLayout) {
//这里定义的是Tag名称
this(messageLayout, new PatternLayout("%c"));
}
public LogCatAppender() {
this(new PatternLayout("%c"));
}
protected void append(LoggingEvent le) {
switch (le.getLevel().toInt()) {
case 5000:
if (le.getThrowableInformation() != null) {
Log.v(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.v(getTagLayout().format(le), getLayout().format(le));
}
break;
case 10000:
if (le.getThrowableInformation() != null) {
Log.d(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.d(getTagLayout().format(le), getLayout().format(le));
}
break;
case 20000:
if (le.getThrowableInformation() != null) {
Log.i(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.i(getTagLayout().format(le), getLayout().format(le));
}
break;
case 30000:
if (le.getThrowableInformation() != null) {
Log.w(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.w(getTagLayout().format(le), getLayout().format(le));
}
break;
case 40000:
if (le.getThrowableInformation() != null) {
Log.e(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.e(getTagLayout().format(le), getLayout().format(le));
}
break;
case 50000:
if (le.getThrowableInformation() != null) {
Log.wtf(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else
Log.wtf(getTagLayout().format(le), getLayout().format(le));
break;
}
}
public void close() {
}
public boolean requiresLayout() {
return true;
}
public Layout getTagLayout() {
return this.tagLayout;
}
public void setTagLayout(Layout tagLayout) {
this.tagLayout = tagLayout;
}
}
package com.example.log4j;
import java.io.IOException;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.helpers.LogLog;
/**
* 源自 android-logging-log4j-1.0.3.jar
*
* @author Administrator
*/
public class LogConfig {
private Level rootLevel = Level.DEBUG;
/**
* ### log文件的格式
*
* ### 输出格式解释:
* ### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
*
* ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
* ### %c: 全类名
* ### %M: 调用的方法名称
* ### %F:%L 类名:行号(在控制台可以追踪代码)
* ### %n: 换行
* ### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
* ### %m: 日志信息
* ### 输出的信息大概如下:
* ### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
* ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
*/
private String filePattern = "[%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n";
/**
* ### LogCat控制台输出格式
*
* ### [Class: 信息所在的class.method(className:lineNumber)] 换行
* ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
*/
private String logCatPattern = "[Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n";
private String fileName = "android-log4j.log";
private int maxBackupSize = 5;
private long maxFileSize = 1024 * 1024 * 5L;
private boolean immediateFlush = true;
private boolean useLogCatAppender = true;
private boolean useFileAppender = true;
private boolean resetConfiguration = true;
private boolean internalDebugging = false;
public LogConfig() {
}
public LogConfig(String fileName) {
setFileName(fileName);
}
public LogConfig(String fileName, Level rootLevel) {
this(fileName);
setRootLevel(rootLevel);
}
public LogConfig(String fileName, Level rootLevel, String filePattern) {
this(fileName);
setRootLevel(rootLevel);
setFilePattern(filePattern);
}
public LogConfig(String fileName, int maxBackupSize, long maxFileSize, String filePattern, Level rootLevel) {
this(fileName, rootLevel, filePattern);
setMaxBackupSize(maxBackupSize);
setMaxFileSize(maxFileSize);
}
public void configure() {
Logger root = Logger.getRootLogger();
if (isResetConfiguration()) {
LogManager.getLoggerRepository().resetConfiguration();
}
LogLog.setInternalDebugging(isInternalDebugging());
if (isUseFileAppender()) {
configureFileAppender();
}
if (isUseLogCatAppender()) {
configureLogCatAppender();
}
root.setLevel(getRootLevel());
}
public void setLevel(String loggerName, Level level) {
Logger.getLogger(loggerName).setLevel(level);
}
private void configureFileAppender() {
Logger root = Logger.getRootLogger();
Layout fileLayout = new PatternLayout(getFilePattern());
RollingFileAppender rollingFileAppender;
try {
rollingFileAppender = new RollingFileAppender(fileLayout, getFileName());
} catch (IOException e) {
throw new RuntimeException("Exception configuring log system", e);
}
rollingFileAppender.setMaxBackupIndex(getMaxBackupSize());
rollingFileAppender.setMaximumFileSize(getMaxFileSize());
rollingFileAppender.setImmediateFlush(isImmediateFlush());
root.addAppender(rollingFileAppender);
}
private void configureLogCatAppender() {
Logger root = Logger.getRootLogger();
Layout logCatLayout = new PatternLayout(getLogCatPattern());
LogCatAppender logCatAppender = new LogCatAppender(logCatLayout);
root.addAppender(logCatAppender);
}
public Level getRootLevel() {
return this.rootLevel;
}
public void setRootLevel(Level level) {
this.rootLevel = level;
}
public String getFilePattern() {
return this.filePattern;
}
public void setFilePattern(String filePattern) {
this.filePattern = filePattern;
}
public String getLogCatPattern() {
return this.logCatPattern;
}
public void setLogCatPattern(String logCatPattern) {
this.logCatPattern = logCatPattern;
}
public String getFileName() {
return this.fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public int getMaxBackupSize() {
return this.maxBackupSize;
}
public void setMaxBackupSize(int maxBackupSize) {
this.maxBackupSize = maxBackupSize;
}
public long getMaxFileSize() {
return this.maxFileSize;
}
public void setMaxFileSize(long maxFileSize) {
this.maxFileSize = maxFileSize;
}
public boolean isImmediateFlush() {
return this.immediateFlush;
}
public void setImmediateFlush(boolean immediateFlush) {
this.immediateFlush = immediateFlush;
}
public boolean isUseFileAppender() {
return this.useFileAppender;
}
public void setUseFileAppender(boolean useFileAppender) {
this.useFileAppender = useFileAppender;
}
public boolean isUseLogCatAppender() {
return this.useLogCatAppender;
}
public void setUseLogCatAppender(boolean useLogCatAppender) {
this.useLogCatAppender = useLogCatAppender;
}
public void setResetConfiguration(boolean resetConfiguration) {
this.resetConfiguration = resetConfiguration;
}
public boolean isResetConfiguration() {
return this.resetConfiguration;
}
public void setInternalDebugging(boolean internalDebugging) {
this.internalDebugging = internalDebugging;
}
public boolean isInternalDebugging() {
return this.internalDebugging;
}
}
\ No newline at end of file
package com.example.log4j;
import java.io.File;
import java.util.Date;
import java.util.Locale;
import java.text.SimpleDateFormat;
import org.apache.log4j.Level;
import android.os.Environment;
/**
* LogUtil 工具类
*
* @author Administrator
*/
@SuppressWarnings("all")
public class LogUtil {
private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd");
private static final String timeStr = formatter.format(new Date(System.currentTimeMillis()));
/**
* 这里的AppName决定log的文件位置和名称
**/
private static final String APP_NAME = "MockGPS";
/**
* 设置log文件全路径,这里是 MyApp/Log/myapp.log
**/
private static final String LOG_FILE_PATH = Environment.getExternalStorageDirectory() + File.separator + APP_NAME
+ File.separator + "Log" + File.separator + APP_NAME.toLowerCase(Locale.CHINA) + timeStr + ".log";
/**
* ### log文件的格式
* <p>
* ### 输出格式解释:
* ### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
* <p>
* ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
* ### %c: 全类名
* ### %M: 调用的方法名称
* ### %F:%L 类名:行号(在控制台可以追踪代码)
* ### %n: 换行
* ### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
* ### %m: 日志信息
* <p>
* ### 输出的信息大概如下:
* ### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
* ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
*/
private static final String LOG_FILE_PATTERN = "[%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n";
/**
* 生产环境下的log等级
**/
private static final Level LOG_LEVEL_PRODUCE = Level.ALL;
/**
* 发布以后的log等级
**/
private static final Level LOG_LEVEL_RELEASE = Level.INFO;
/**
* 配置log4j参数
*/
public static void configLog() {
LogConfig logConfig = new LogConfig();
/** 设置Log等级,生产环境下调用setLogToProduce(),发布后调用setLogToRelease() **/
setLogToProduce(logConfig);
logConfig.setFileName(LOG_FILE_PATH);
logConfig.setLevel("org.apache", Level.ERROR);
logConfig.setFilePattern(LOG_FILE_PATTERN);
logConfig.setMaxFileSize(1024 * 1024 * 5);
logConfig.setImmediateFlush(true);
logConfig.configure();
}
/**
* 将log设置为生产环境
*
* @param logConfig
*/
private static void setLogToProduce(LogConfig logConfig) {
logConfig.setRootLevel(LOG_LEVEL_PRODUCE);
}
/**
* 将log设置为发布以后的环境
*
* @param logConfig
*/
private static void setLogToRelease(LogConfig logConfig) {
logConfig.setRootLevel(LOG_LEVEL_RELEASE);
}
}
......@@ -8,6 +8,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
......@@ -30,6 +31,7 @@ public class StartActivity extends AppCompatActivity {
permissions = new ArrayList<String>();
getPersimmions();
isStart=false;
Log.d("START",""+permissions.size());
if (permissions.size()==0){
new Handler().postDelayed(new Runnable() {
public void run() {
......@@ -87,9 +89,9 @@ public class StartActivity extends AppCompatActivity {
permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n";
}
// 读取电话状态权限
if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) {
permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n";
}
// if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) {
// permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n";
// }
if (permissions.size() > 0) {
requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST);
......
......@@ -60,7 +60,7 @@ public class FloatWindow implements View.OnTouchListener {
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mWindowParams.gravity = Gravity.START | Gravity.TOP;
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.height = 96;
mWindowParams.height = 108;
// mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
Log.d("FLOAT","initFloatWindow finish");
}
......
......@@ -27,8 +27,11 @@ import android.view.Gravity;
import android.widget.Toast;
import com.baidu.mapapi.model.LatLng;
import com.example.log4j.LogUtil;
import com.example.mockgps.R;
import org.apache.log4j.Logger;
import java.util.UUID;
public class MockGpsService extends Service {
......@@ -53,6 +56,8 @@ public class MockGpsService extends Service {
public static final int RunCode=0x01;
public static final int StopCode=0x02;
//log debug
private static Logger log = Logger.getLogger(MockGpsService.class);
@Nullable
@Override
......@@ -63,7 +68,9 @@ public class MockGpsService extends Service {
@SuppressLint("WrongConstant")
@Override
public void onCreate() {
LogUtil.configLog();
Log.d(TAG, "onCreate");
log.debug(TAG+ ": onCreate");
super.onCreate();
locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
......@@ -72,9 +79,13 @@ public class MockGpsService extends Service {
rmNetworkProvider();
//add a new network location provider
// setGPSProvider();
setNewNetworkProvider();
// rmGPSProvider();
// setGPSProvider();
//setGPSProvider();
//thread
handlerThread=new HandlerThread(getUUID(),-2);
handlerThread.start();
......@@ -84,6 +95,13 @@ public class MockGpsService extends Service {
try {
Thread.sleep(333);
if (!isStop){
//remove default network location provider
//rmNetworkProvider();
//add a new network location provider
//setNewNetworkProvider();
setNetworkLocation();
sendEmptyMessage(0);
//broadcast to MainActivity
......@@ -94,7 +112,8 @@ public class MockGpsService extends Service {
}
} catch (InterruptedException e) {
e.printStackTrace();
Log.d(TAG, "setNetworkLocation error");
Log.d(TAG, "handleMessage error");
log.debug(TAG+ ": handleMessage error");
Thread.currentThread().interrupt();
}
}
......@@ -106,12 +125,14 @@ public class MockGpsService extends Service {
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "onStart");
log.debug(TAG+ ": onStart");
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
log.debug(TAG+ ": onStartCommand");
// DisplayToast("Mock Location Service Start");
//
......@@ -145,6 +166,7 @@ public class MockGpsService extends Service {
//get location info from mainActivity
latLngInfo=intent.getStringExtra("key");
Log.d(TAG, "dataFromMain is "+latLngInfo);
log.debug(TAG+ ": dataFromMain is "+latLngInfo);
//start to refresh location
isStop=false;
......@@ -165,6 +187,7 @@ public class MockGpsService extends Service {
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
log.debug(TAG+ ": onDestroy");
// Toast.makeText(this, "Service destroyed", Toast.LENGTH_SHORT).show();
// DisplayToast("Mock Loction Service finish");
......@@ -178,6 +201,7 @@ public class MockGpsService extends Service {
handlerThread.quit();
rmNetworkProvider();
//rmGPSProvider();
stopForeground(true);
//broadcast to MainActivity
......@@ -219,15 +243,20 @@ public class MockGpsService extends Service {
//set network location
private void setNetworkLocation() {
//default location 30.5437233 104.0610342 成都长虹科技大厦
Log.d(TAG, "setNetworkLocation: "+latLngInfo);
log.debug(TAG+ ": setNetworkLocation: "+latLngInfo);
String latLngStr[]=latLngInfo.split("&");
LatLng latLng = new LatLng(Double.valueOf(latLngStr[1]), Double.valueOf(latLngStr[0]));
String providerStr = LocationManager.NETWORK_PROVIDER;
// String providerStr2 = LocationManager.GPS_PROVIDER;
try {
locationManager.setTestProviderLocation(providerStr, generateLocation(latLng));
// locationManager.setTestProviderLocation(providerStr2, generateLocation(latLng));
//for test
// locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, generateLocation(latLng));
} catch (Exception e) {
Log.d(TAG, "setNetworkLocation error");
log.debug(TAG+ ": setNetworkLocation error");
e.printStackTrace();
}
}
......@@ -235,15 +264,23 @@ public class MockGpsService extends Service {
//remove network provider
private void rmNetworkProvider(){
try {
String providerStr = LocationManager.NETWORK_PROVIDER;
if (locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now remove NetworkProvider");
for(int i=0;i<3;i++){
String providerStr = LocationManager.NETWORK_PROVIDER;
if (locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now remove NetworkProvider: "+i);
log.debug(TAG+ ": now remove NetworkProvider: "+i);
// locationManager.setTestProviderEnabled(providerStr,true);
locationManager.removeTestProvider(providerStr);
locationManager.removeTestProvider(providerStr);
}else{
Log.d(TAG, "NetworkProvider is not enabled: "+i);
log.debug(TAG+ ": NetworkProvider is not enabled: "+i);
}
}
}catch (Exception e){
e.printStackTrace();
Log.d(TAG, "rmNetworkProvider error");
log.debug(TAG+ ": rmNetworkProvider error");
}
}
......@@ -255,38 +292,57 @@ public class MockGpsService extends Service {
false, false, false, false,
false, 1, Criteria.ACCURACY_FINE);
Log.d(TAG,"addTestProvider[network] success");
log.debug(TAG+": addTestProvider[network] success");
// locationManager.setTestProviderStatus("network", LocationProvider.AVAILABLE, null,
// System.currentTimeMillis());
}catch (SecurityException e){
Log.d(TAG,"setNewNetworkProvider error");
log.debug(TAG+": setNewNetworkProvider error");
}
if (!locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now setTestProviderEnabled[network]");
log.debug(TAG+ ": now setTestProviderEnabled[network]");
locationManager.setTestProviderEnabled(providerStr,true);
}
}
// for test: set GPS provider
private void rmGPSProvider(){
try {
String providerStr = LocationManager.GPS_PROVIDER;
if (locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now remove GPSProvider");
// locationManager.setTestProviderEnabled(providerStr,true);
locationManager.removeTestProvider(providerStr);
}
}catch (Exception e){
e.printStackTrace();
Log.d(TAG, "rmGPSProvider error");
}
}
private void setGPSProvider(){
LocationProvider provider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
if (provider != null) {
locationManager.addTestProvider(
provider.getName()
, provider.requiresNetwork()
, provider.requiresSatellite()
, provider.requiresCell()
, provider.hasMonetaryCost()
, provider.supportsAltitude()
, provider.supportsSpeed()
, provider.supportsBearing()
, provider.getPowerRequirement()
, provider.getAccuracy());
} else {
locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, true, false,
// if (provider != null) {
// locationManager.addTestProvider(
// provider.getName()
// , provider.requiresNetwork()
// , provider.requiresSatellite()
// , provider.requiresCell()
// , provider.hasMonetaryCost()
// , provider.supportsAltitude()
// , provider.supportsSpeed()
// , provider.supportsBearing()
// , provider.getPowerRequirement()
// , provider.getAccuracy());
// } else {
locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, true, true,
false, true, true, true, 0, 5);
}
// }
// if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
// }
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
//新
locationManager.setTestProviderStatus(LocationManager.GPS_PROVIDER, LocationProvider.AVAILABLE, null,
System.currentTimeMillis());
......
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/floatButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......
......@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/white">
<ImageView
......@@ -16,14 +17,14 @@
<Button
android:id="@+id/startButton"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_height="35dp"
android:background="@drawable/btn_bottom_confirm_bg"
android:gravity="center"
android:text="@string/startUse"
android:textSize="17sp"
android:textAlignment="center"
android:layout_gravity="bottom|center"
android:layout_margin="96dp" />
android:layout_margin="106dp" />
<TextView
android:layout_width="wrap_content"
......
......@@ -20,14 +20,15 @@
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="设置" />
<item
android:id="@+id/nav_bug_report"
android:icon="@drawable/ic_bug_report_18pt_3x"
android:title="问题反馈" />
</group>
<item android:title="Communicate">
<menu>
<!--<item-->
<!--android:id="@+id/nav_share"-->
<!--android:icon="@drawable/ic_menu_share"-->
<!--android:title="分享" />-->
<item
android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册