版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23195583/article/details/53782174
这次不多说了,给大家上一下代码,是用mvp写的,这里再说一下资源对应的问题,如果和main同级的z开头的包中没有的话gradle会默认从和main中进行资源的查找,这里我上代码就把main中的上一下,代码已经托管到github上了
baseview:
package com.fanyafeng.codetopackage;
/**
* Author: fanyafeng
* Data: 16/12/20 下午6:05
* Email: fanyafeng@live.cn
*/
public interface BaseView<T> {
void setPresenter(T presenter);
}
basepresenter:
package com.fanyafeng.codetopackage;
/**
* Author: fanyafeng
* Data: 16/12/20 下午6:05
* Email: [email protected]
*/
public interface BasePresenter {
void start();
}
baseactivity:
package com.fanyafeng.codetopackage;
import android.os.Bundle;
import android.widget.TextView;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
public class BaseActivity extends AppCompatActivity implements View.OnClickListener {
protected Toolbar toolbar;
protected TextView toolbar_center_title;
protected boolean isShowToolbar = true;
protected boolean isSetNavigationIcon = true;
protected boolean isSetLogo = false;
protected boolean isShowEmail = true;
protected String title;
protected String centertitle;
protected String subtitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onClick(View v) {
}
@Override
protected void onResume() {
super.onResume();
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar_center_title = (TextView) findViewById(R.id.toolbar_center_title);
if (toolbar != null) {
if (isShowToolbar) {
setSupportActionBar(toolbar);
} else {
toolbar.setVisibility(View.GONE);
}
if (title != null && !title.equals("")) {
toolbar.setTitle(title);
} else {
toolbar.setTitle("");
}
if (subtitle != null && !subtitle.equals("")) {
toolbar.setSubtitle(subtitle);
}
if (isSetNavigationIcon) {
// 由于要兼容低版本,所以采用这个划杠的方法,需要自己根据需求替换图片
toolbar.setNavigationIcon(getResources().getDrawable(R.mipmap.ic_menu_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
if (isSetLogo) {
//需要自己根据需求进行替换图片
toolbar.setLogo(getResources().getDrawable(R.mipmap.ic_launcher));
}
if (toolbar_center_title != null) {
if (centertitle != null && !centertitle.equals("")) {
toolbar_center_title.setText(centertitle);
} else {
toolbar_center_title.setText("");
}
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_base, menu);
// 默认隐藏setting按钮
if (toolbar != null) {
MenuItem menuItem = toolbar.getMenu().getItem(0);
if (menuItem != null) {
menuItem.setVisible(false);
}
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
break;
}
return super.onOptionsItemSelected(item);
}
}
注释不多,但是比较容易理解
maincontract
package com.fanyafeng.codetopackage.main;
import com.fanyafeng.codetopackage.BasePresenter;
/**
* Author: fanyafeng
* Data: 16/12/20 下午6:06
* Email: [email protected]
*/
public interface MainContract {
interface View {
void setMyPackageName(String packageName);
void setMyPackageInfo(String packageInfo);
void setName(String name);
void setGitHub(String gitHub);
void setCSDN(String csdn);
}
interface Presenter extends BasePresenter {
void setMyPackageName();
void setMyPackageInfo();
void setName();
}
}
mainpresenter:
package com.fanyafeng.codetopackage.main;
import android.content.Context;
import com.fanyafeng.codetopackage.R;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
/**
* Author: fanyafeng
* Data: 16/12/20 下午6:07
* Email: [email protected]
*/
public class MainPresenter implements MainContract.Presenter {
private String myPackage;
private String myName;
private String myGitHub;
private String myCSDN;
private Context context;
private MainContract.View view;
public MainPresenter(Context context, MainContract.View view) {
this.context = context;
this.view = view;
}
@Override
public void start() {
try {
Properties properties = new Properties();
InputStream inputStream = context.getAssets().open("config.properties");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
properties.load(bufferedReader);
myPackage = properties.getProperty("mypackage");
myName = properties.getProperty("myname");
myGitHub = properties.getProperty("mygithub");
myCSDN = properties.getProperty("mycsdn");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void setMyPackageName() {
view.setMyPackageName(myPackage);
}
@Override
public void setMyPackageInfo() {
view.setMyPackageInfo(myName);
}
@Override
public void setName() {
view.setName(context.getString(R.string.app_name));
view.setGitHub(myGitHub);
view.setCSDN(myCSDN);
}
}
对配置文件的操作在p里面,不了解的可以百度一下
mainactivity:
package com.fanyafeng.codetopackage.main;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.fanyafeng.codetopackage.R;
import com.fanyafeng.codetopackage.BaseActivity;
//需要搭配Baseactivity,这里默认为Baseactivity,并且默认BaseActivity为包名的根目录
public class MainActivity extends BaseActivity implements MainContract.View {
private MainContract.Presenter presenter;
private Button btnMyPackageName;
private TextView tvMyPackageName;
private Button btnMyPackageInfo;
private TextView tvMyPackageInfo;
private Button btnGetName;
private TextView tvGetName;
private TextView tvGetName1;
private TextView tvGetName2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这里默认使用的是toolbar的左上角标题,如果需要使用的标题为中心的采用下方注释的代码,将此注释掉即可
title = getString(R.string.title_activity_main);
isSetNavigationIcon = false;
presenter = new MainPresenter(this, this);
initView();
presenter.start();
initData();
}
//初始化UI控件
private void initView() {
btnMyPackageName = (Button) findViewById(R.id.btnMyPackageName);
btnMyPackageName.setOnClickListener(this);
tvMyPackageName = (TextView) findViewById(R.id.tvMyPackageName);
btnMyPackageInfo = (Button) findViewById(R.id.btnMyPackageInfo);
btnMyPackageInfo.setOnClickListener(this);
tvMyPackageInfo = (TextView) findViewById(R.id.tvMyPackageInfo);
btnGetName = (Button) findViewById(R.id.btnGetName);
btnGetName.setOnClickListener(this);
tvGetName = (TextView) findViewById(R.id.tvGetName);
tvGetName1 = (TextView) findViewById(R.id.tvGetName1);
tvGetName2 = (TextView) findViewById(R.id.tvGetName2);
}
//初始化数据
private void initData() {
}
@Override
public void setMyPackageName(String packageName) {
tvMyPackageName.setText(packageName);
}
@Override
public void setMyPackageInfo(String packageInfo) {
tvMyPackageInfo.setText(packageInfo);
}
@Override
public void setName(String name) {
tvGetName.setText(name);
}
@Override
public void setGitHub(String gitHub) {
tvGetName1.setText(gitHub);
}
@Override
public void setCSDN(String csdn) {
tvGetName2.setText(csdn);
}
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.btnMyPackageName:
presenter.setMyPackageName();
break;
case R.id.btnMyPackageInfo:
presenter.setMyPackageInfo();
break;
case R.id.btnGetName:
presenter.setName();
break;
}
}
}
配置文件:config.properties
mypackage=365rili
myname=fanyafeng
mygithub=https://github.com/1181631922
mycsdn=http://blog.csdn.net/qq_23195583
这里类似键值对,回车换行,支持中文,但是需要注意乱码问题
gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.fanyafeng.codetopackage"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
z20111308011 {
applicationId "com.fanyafeng.codetopackage.z20111308011"
manifestPlaceholders = [APP_NAME: "求福"]
}
z20111308016 {
applicationId "com.fanyafeng.codetopackage.z20111308016"
manifestPlaceholders = [APP_NAME: "红酒"]
}
z20111308069 {
applicationId "com.fanyafeng.codetopackage.z20111308069"
manifestPlaceholders = [APP_NAME: "测试"]
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:design:25.1.0'
testCompile 'junit:junit:4.12'
}
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fanyafeng.codetopackage">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${APP_NAME}"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".main.MainActivity"
android:label="${APP_NAME}"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>