第8天(一些零零碎碎的知识点)

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;
    }

}


猜你喜欢

转载自blog.csdn.net/qq_34097912/article/details/80986598