1.使用TextView实现滚动效果(自定义控件)
<!--
singleLine:单行显示
ellipsize:marquee文字超长滚动效果
focusableInTouchMode:设置控件获取焦点
focusable:设置控件获取焦点
marqueeRepeatLimit:设置滚动次数
-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="xutils是前几年比较火xutils是前几年比较火xutils是前几年比较火" />
<!--
使用自定义控件来实现,支持多个TextView滚动效果
-->
<com.example.others.MarqueTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="xutils是前几年比较火xutils是前几年比较火xutils是前几年比较火" />
public class MarqueTextView extends TextView {
public MarqueTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MarqueTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueTextView(Context context) {
super(context);
}
// TextView获得焦点
@Override
public boolean isFocused() {
return true;
}
2.使用GridView控件使用
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<!--
columnWidth:每列的宽度
gravity:设置内容对其方式
horizontalSpacing:设置两列的距离
verticalSpacing:设置两行之间的距离
numColumns:列数
stretchMode="columnWidth":缩放与列宽大小同步
-->
<GridView
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="50dp"
android:numColumns="3"
android:layout_centerInParent="true"
android:stretchMode="columnWidth"
android:verticalSpacing="15dp" />
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_launcher" >
</ImageView>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView"
android:layout_centerHorizontal="true"
android:text="流量检测" >
</TextView>
</RelativeLayout>
public class MainActivity extends Activity {
private String[] operates = { "流量监控", "空间检测", "查杀病毒", "系统维护", "扫描文件", "文件加锁", "清理空间", "手机防盗", "安全卫士", "设置中心" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new MyAdapter());
// 给GridView的item绑定点击事件
gridView.setOnItemClickListener(new ItemClickEvent());
}
private class ItemClickEvent implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String text = "你点击的操作是:" + operates[position];
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
}
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return operates.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.gridviewitem, null);
} else {
view = convertView;
}
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
TextView textView = (TextView) view.findViewById(R.id.textView);
textView.setText(operates[position]);
imageView.setImageResource(R.drawable.qq);
return view;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
3.获取应用的版本号
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="getVersion"
android:text="获取版本号" />
</LinearLayout>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void getVersion(View view) {
PackageManager packageManager = getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
int versionCode = packageInfo.versionCode;
String versionName = packageInfo.versionName;
String text = "versionCode:" + versionCode + "," + "versionName:" + versionName;
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
4.自定义对话框,并且给按钮绑定点击事件。OnLongClickListener长按事件介绍
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="openDialog"
android:text="自定义对话框" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="长按事件" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:inputType="textPassword"
android:text=""
android:textColor="#000000"
android:textColorHint="#000000"
android:textSize="15dp" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请再次确认密码"
android:inputType="textPassword"
android:text=""
android:textColor="#000000"
android:textColorHint="#000000"
android:textSize="15dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="confirm"
android:text="确认"
android:textColorHint="#AAAAAA"
android:textSize="15dp" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="cancel"
android:text="取消"
android:textColorHint="#AAAAAA"
android:textSize="15dp" />
</LinearLayout>
</LinearLayout>
package com.example.others;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private AlertDialog dialog = null;
private EditText pwdEditText = null;
private EditText confirmPwdEditText = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button longTouchButton = (Button) findViewById(R.id.button2);
// 绑定长按点击事件
longTouchButton.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(getApplicationContext(), "触发了长按点击事件", Toast.LENGTH_LONG).show();
return false;
}
});
}
public void openDialog(View view) {
AlertDialog.Builder builder = new Builder(MainActivity.this);
// 点击空白处不会消失
builder.setCancelable(false);
// 设置对话框标题
builder.setTitle("自定义对话框");
// 设置对话框图标
builder.setIcon(R.drawable.weixin);
// 加载布局文件
View pwdView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.passworddialog, null);
// 设置自定义对话框布局
builder.setView(pwdView);
dialog = builder.create();
// 获取本地的密码信息
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
String pwd = sp.getString("pwd", "");
String confirmPwd = sp.getString("confirmPwd", "");
// 密码框
pwdEditText = (EditText) pwdView.findViewById(R.id.editText1);
// 确认密码框
confirmPwdEditText = (EditText) pwdView.findViewById(R.id.editText2);
pwdEditText.setText(pwd);
confirmPwdEditText.setText(confirmPwd);
// 确认按钮
Button confirmButton = (Button) pwdView.findViewById(R.id.button1);
// 取消按钮
Button cancelButton = (Button) pwdView.findViewById(R.id.button2);
confirmButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String pwd = pwdEditText.getText().toString();
String confirmPwd = confirmPwdEditText.getText().toString();
String tt = "密码:" + pwd + ",确认密码:" + confirmPwd;
if (TextUtils.isEmpty(pwd)) {
Toast.makeText(getApplicationContext(), "请输入密码!", Toast.LENGTH_LONG).show();
return;
}
if (TextUtils.isEmpty(confirmPwd)) {
Toast.makeText(getApplicationContext(), "请输入确认密码!", Toast.LENGTH_LONG).show();
return;
}
if (!pwd.equals(confirmPwd)) {
Toast.makeText(getApplicationContext(), "确认密码和密码不一致!", Toast.LENGTH_LONG).show();
return;
}
if (!pwd.matches("^[0-9]{6,10}$")) {
Toast.makeText(getApplicationContext(), "密码只能输入6到10位的数字!", Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(getApplicationContext(), tt, Toast.LENGTH_LONG).show();
// 保存信息到本地
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("pwd", pwd);
editor.putString("confirmPwd", confirmPwd);
editor.commit();
dialog.dismiss();
}
});
cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
// 展示对话框
dialog.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.others"
android:versionCode="5"
android:versionName="3.5" >
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/xcx"
android:label="小程序"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.others.MainActivity"
android:label="小程序" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
5.使用fastjson实现json和map之前的相互转换
public static void main(String[] args) {
String json = "{\"id\": \"111\",\"name\": \"222\"}";
//将JSON字符串转化为map
Map<String, Object> resultMap = (Map<String, Object>) JSONObject.parse(json);
System.out.println(resultMap);
//将map转化为json字符串
String jsonStr = JSONObject.toJSONString(resultMap);
System.out.println(jsonStr);
}
6.使用xutils实现文件下载
package com.example.others;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
import org.xutils.x;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.fastjson.JSONObject;
@SuppressWarnings("unchecked")
public class MainActivity extends Activity {
private TextView versiontextView;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
int what = msg.what;
switch (what) {
// 版本相同进入主界面
case 1:
Toast.makeText(getApplicationContext(), "版本相同进入主界面", Toast.LENGTH_LONG).show();
// 进入主界面
enterHomeActivity();
break;
// 版本不相同提示更新
case 2:
Toast.makeText(getApplicationContext(), "版本不相同提示更新", Toast.LENGTH_LONG).show();
// 打开提示更新弹框
openTipUpdateDialog();
break;
// 下载成功
case 3:
Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_LONG).show();
break;
// 下载失败
case 4:
Toast.makeText(getApplicationContext(), "下载失败", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};
private void openTipUpdateDialog() {
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setTitle("提示更新升级");
builder.setIcon(R.drawable.weixin);
builder.setMessage("你的app版本不是最新版本,确定要升级吗?");
builder.setCancelable(false);
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "取消", Toast.LENGTH_LONG).show();
//取消之后进入主页面
enterHomeActivity();
}
});
builder.setPositiveButton("升级下载", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "升级下载", Toast.LENGTH_LONG).show();
String path = getApplicationContext().getFilesDir().getAbsolutePath() + File.separator
+ "luxiaofeng20180713-1.gif";
RequestParams requestParams = new RequestParams("http://xx:8080/tomcat-power.gif");
// 为RequestParams设置文件下载后的保存路径
requestParams.setSaveFilePath(path);
x.http().get(requestParams, new Callback.ProgressCallback<File>() {
@Override
public void onSuccess(File result) {
sendHandlerMessage(3);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
sendHandlerMessage(4);
}
@Override
public void onCancelled(CancelledException arg0) {
}
@Override
public void onFinished() {
}
@Override
public void onLoading(long arg0, long arg1, boolean arg2) {
}
@Override
public void onStarted() {
}
@Override
public void onWaiting() {
}
});
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
private void enterHomeActivity() {
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
versiontextView = (TextView) findViewById(R.id.versiontextView);
// 获取版本号
String versionNo = getVersionNo();
versiontextView.setText("版本号:" + versionNo);
// 提示更新版本
updateVersion();
}
private void updateVersion() {
// 获取服务器上的版本号
new Thread() {
public void run() {
// 获取版本号
String versionNo = getVersionNo();
String jsonStr = getRemoteVersionNo();
Map<String, String> jsonMap = (Map<String, String>) JSONObject.parse(jsonStr);
String remoteVersion = jsonMap.get("versionName");
// 在当前界面停留2秒
SystemClock.sleep(2000);
// 进入主页面
if (remoteVersion.equals(versionNo)) {
sendHandlerMessage(1);
}
// 不同提示更新
else {
sendHandlerMessage(2);
}
}
}.start();
}
private String getRemoteVersionNo() {
String version = "";
// 获取网络URL
try {
URL url = new URL("http://xx:8080/getVersion.action");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int temp;
while ((temp = is.read()) != -1) {
baos.write(temp);
}
return baos.toString();
} catch (Exception e) {
e.printStackTrace();
}
return version;
}
private void sendHandlerMessage(int what) {
Message msg = new Message();
msg.what = what;
handler.sendMessage(msg);
}
// 获取应用版本号
private String getVersionNo() {
PackageManager packageManager = getPackageManager();
String versionName = "";
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
}