写android代码总是考虑不到那么多
2017-03-17 16:05:42 li_xianyuan 阅读数 229

Android 经常是随着条件的改变,布局也随着改变,这就需要在代码中进行控制布局。
一、已经有的布局,例如在相对布局下,也就是说控制相对布局下的子控件的位置大小等

//一定要导入是相对布局的LayoutParams
import android.widget.RelativeLayout.LayoutParams;
//控制iv_sign(ImageView)的大小和位置
LayoutParams lp = (LayoutParams)iv_sign.getLayoutParams();
            lp.width = dip2px(context,51);
            lp.height = dip2px(context,51);
            lp.addRule(RelativeLayout.CENTER_HORIZONTAL, -1);
            lp.addRule(RelativeLayout.CENTER_VERTICAL, -1);
            iv_sign.setLayoutParams(lp);

二、创建新的布局,例如线性布局,也就是说在xml文件中线性布局里我们需要创建新的子布局,比如文本布局

//注意一定要到线性布局的包
import android.widget.LinearLayout.LayoutParams;
// 创建LinearLayout对象  
LinearLayout mLinearLayout = new LinearLayout(this);  
// 建立布局样式宽和高,对应xml布局中:  
// android:layout_width="fill_parent"  
// android:layout_height="fill_parent"  
mLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(  
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
// 设置方向,对应xml布局中:  
// android:orientation="vertical"  
mLinearLayout.setOrientation(LinearLayout.VERTICAL);  
// 创建TextView对象  
TextView mTextView = new TextView(this);  
// 设置文字  
mTextView.setText("hello world");  
// 为其建立布局样式,对应xml布局中:  
// android:layout_width="fill_parent"  
// android:layout_height="wrap_content"  
LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(  
        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
// 在父类布局中添加它,及布局样式  
mLinearLayout.addView(mTextView, mLayoutParams);  

总之,这里还有很多其他的属性例如居中,距离,颜色等,自己可以多试一试。

2017-02-14 00:21:27 QCkiss 阅读数 307

android notifyDataSetChanged失效。

一个月前遇到的问题,本来不打算写,遇到的问题都自己记录在了有道笔记本上。天下博客一大抄,真正有用的就几句话而已。这个问题早就见过了,无非是:1,数据源2,adapter3,listView;1–2 / 2–3 的关系破裂。检查代码没有问题,依然不能更新数据。本着万变不离其宗的原理,一定是某关系已断。
简化当时情景是A activity启动了插件activity B,B要回传数据给A后A更新列表,B限制横屏,A限制竖屏。由于不在同一进程中,B关闭时,回到A ,A刚出现时却是横屏(当时的设备并未显示横屏),此时应该知道怎么做了。屏幕旋转默认会重走onCreate 2 – 3已经物是人非了。
—-分割线—————————————————–
总之一句话不同进程间切换会相互影响,不仅仅是notifyDataSetChanged失效。
比如在某个activity正在运行时,按多任务键切到比如看看全屏视频(横屏)再切回来,这个activity会重新onCreate;

2016-05-04 17:27:04 linder_qzy 阅读数 455

项目中经常会遇到需要在代码中编写布局的情况,下面简单说下如何在代码中写布局

先看下效果:


看下代码如何实现吧:

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
public class DemoActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		// 根布局View,下边所有View都在此RelativeLayout中
		RelativeLayout rootLayout = new RelativeLayout(this);
		RelativeLayout.LayoutParams rootLayoutParams = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.MATCH_PARENT,
				ViewGroup.LayoutParams.MATCH_PARENT);
		rootLayout.setLayoutParams(rootLayoutParams);

		// 设置在根布局的左上角
		RelativeLayout.LayoutParams LTLayoutParams = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		LTLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		LTLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
		Button btnLT = new Button(this);
		btnLT.setText("左----------上");
		btnLT.setId(1);

		// 设置在btnLT的下边并且右对齐
		RelativeLayout.LayoutParams LTLDLayoutParams = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		LTLDLayoutParams.addRule(RelativeLayout.BELOW, btnLT.getId());
		LTLDLayoutParams.addRule(RelativeLayout.ALIGN_RIGHT, btnLT.getId());//设置和btnLT右对齐
		Button btnDRD = new Button(this);
		btnDRD.setText("底部右对齐");

		// 设置在根布局的左下角
		RelativeLayout.LayoutParams LDLayoutParams = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		LDLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
		LDLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
		Button btnLD = new Button(this);
		btnLD.setText("左----------下");

		// 设置在根布局的右上角
		RelativeLayout.LayoutParams RTLayoutParams = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		RTLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		RTLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
		Button btnRT = new Button(this);
		btnRT.setText("右----------上");;

		// 设置在根布局的右下角
		RelativeLayout.LayoutParams RDLayoutParams = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		RDLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
		RDLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
		Button btnRD = new Button(this);
		btnRD.setText("右----------下");

		rootLayout.addView(btnLT, LTLayoutParams);
		rootLayout.addView(btnLD, LDLayoutParams);
		rootLayout.addView(btnRT, RTLayoutParams);
		rootLayout.addView(btnRD, RDLayoutParams);
		rootLayout.addView(btnDRD, LTLDLayoutParams);
		setContentView(rootLayout);
	}
}

附带使用View.setId的正确姿势

在res/values/下添加ids.xml(名字可随意)文件,代码如下:

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="my_view" type="id" />
</resources>

   然后在代码中做如下设置即可:

1
my_view.setId(R.id.my_view);

下面就将verb相关常量名列如下:

relLayoutParams.alignWithParent=true  如果对应的兄弟元素找不到的话就以父元素做参照物

RelativeLayout.CENTER_HORIZONTAL   在父控件中水平居中

RelativeLayout.CENTER_VERTICAL   在父控件中垂直居中

RelativeLayout.CENTER_IN_PARENT  相对于父控件完全居中

RelativeLayout.ALIGN_PARENT_BOTTOM  紧贴父控件的下边缘

RelativeLayout.ALIGN_PARENT_TOP  紧贴父控件的上边缘

RelativeLayout.ALIGN_PARENT_LEFT紧贴父控件的左边边缘

RelativeLayout.ALIGN_PARENT_RIGHT  紧贴父控件的右边缘

 

RelativeLayout.ABOVE 在某元素的上方  需要第二个参数为某元素的ID

RelativeLayout.BELOW 在某元素的下方 需要第二个参数为 某元素的ID

RelativeLayout.LEFT_OF 在某元素的左边 需要第二个参数为某元素的ID

RelativeLayout.RIGHT_OF  在某元素的右边 需要第二个参数为 某元素的ID

RelativeLayout.ALIGN_TOP 本元素的上边缘和某元素的的上边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BOTTOM 本元素的上边缘和某元素的的下边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_LEFT  本元素的上边缘和某元素的的左边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_RIGHT  本元素的上边缘和某元素的的右边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BASELINE   本元素的基线和某元素的的基线对齐 需要第二个参数为某元素的ID


2016-11-01 16:00:58 tangyeegg 阅读数 233
编写xml文件放到res/drawable-*/下面
最基本的写法如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#00ff40"
        android:endColor="#ff0000"
        android:angle="0"
        />
    <corners android:radius="270dp" />
</shape>


使用方法:android:background="@drawable/shape_background_grey" 
其中 android:angle="270"  代表方向, 270表示从上到下,180表示从右到左,默认从左 

复杂一点的写法如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:endColor="#00ff51"
        android:gradientRadius="250"
        android:startColor="#ff0000"
        android:type="sweep"/>
</shape>

在这里要注意android:type="radial"类型的使用会有不同的效果 
android:centerColor="#FFd4e9a9" 通常这个也不是被人常用 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:angle="90"
        android:centerColor="#25ff00"
        android:centerX="0.5"
        android:centerY="0.5"
        android:endColor="#ff00ea"
        android:startColor="#fff200"
        android:type="linear"/>
    <padding
        android:bottom="7dp"
        android:left="7dp"
        android:right="7dp"
        android:top="7dp"/>
    <corners android:radius="4dp"/>
</shape>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:angle="0"
        android:centerColor="#25ff00"
        android:centerX="0.4"
        android:centerY="0."
        android:endColor="#d903ff"
        android:startColor="#000000"
        android:type="linear"/>
    <padding
        android:bottom="7dp"
        android:left="7dp"
        android:right="7dp"
        android:top="7dp"/>
    <corners android:radius="4dp"/>
</shape>


android:shape 配置的是图形的形式,主要包括方形、圆形等,上边代码为方形。
gradient节点主要配置起点颜色、终点颜色、中间点的坐标、中间点的颜色、渐变角度(90度为上下渐变,0为左右渐变),padding节点主要配置上下左右边距,corners节点配置四周园角的半径。
2015-11-23 10:52:59 l970859633 阅读数 247

代码如下:


package com.sc.WriteToSdcard;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;


public class MainActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//判断设备里面是否有sd卡
        boolean isMounted = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);  
        
        if(isMounted){
        	try {
				writeFileToSDCard();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }else{
        	Log.d("SD卡错误", "未安装SD卡");
        }
	}

	private void writeFileToSDCard() throws IOException{
		File parent_path = Environment.getExternalStorageDirectory();
		
		File dir = new File(parent_path.getAbsoluteFile(), "liangyalong");
		dir.mkdir();
		
		File file = new File(dir.getAbsoluteFile(),"myfile.txt");
		
		Log.d("文件路径", file.getAbsolutePath());
		
		//如果文件不存在,创建这个文件
		file.createNewFile();
		
		FileOutputStream fos = new FileOutputStream(file);
		
		String data = "liangyalong is a handsome boy !!!And luoqiang is a kid!!yes, it is fucking right!!";
		
		byte[] buffer = data.getBytes();
		
		//开始写入数据到这个文件
		fos.write(buffer,0, buffer.length);
		//刷新
		fos.flush();
		fos.close();
		
		Log.d("文件写入", "写入成功");
	}
	
}

记得添加写入权限!

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


没有更多推荐了,返回首页