*项目开发——每日总结

2015/7/31/

项目中的 背景,能用Shape 画得,就不要用图片。

2015/8/3

Handler 的标准写法, 要做成静态。

	private static class MyHandler extends Handler {
		private final WeakReference<MainActivity> mActivity;

		public MyHandler(MainActivity activity) {
			mActivity = new WeakReference<MainActivity>(activity);
		}

		@Override
		public void handleMessage(Message msg) {
			MainActivity activity = mActivity.get();
			if (activity == null) {
				return;
			}
			activity.handleMsg(msg);
		}
	}


------------------------------------------------------------------------------

2015/8/4

 今天项目中遇到一个问题, 在一个Activity 中 有两个Fragment, 这两个fragment 的 OnActivityResult 方法,会被父类 拦截。如果要再Fragment 中的OnActivityResult 方法中处理,就需要在Activity 的OnActivityResult 方法中进行判断,然后传递进去。

Activity 中进行如下处理,就可以传递到 fragment 中

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Fragment f = fragmentManager.findFragmentByTag(curFragmentTag);
        f.onActivityResult(requestCode, resultCode, data);
    }

具体需求就是  两个Fragment 中都要进行选择图片,上传,选择以后 OnActivityResult 方法 被Activity 拦截。

-----------------------------------------------------------------------------------------------------------------------------


2015/8/6

布局中设置 android:οnclick="";  在Fragment  中不可以使用, 只能在Activity 中使用!


2015/8/10


		header_gridview.setOnScrollListener(new OnScrollListener() {
			
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				
				
			}
			
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
				int[] position = new int[2]; 

				name.getLocationOnScreen(position); 
				if( position[1]<=titleHeight*2){
					 setTitle("作者姓名");
				}else{
					setTitle("作者介绍页面");
				}
			}
		});

一个HeadGridview  添加一个 布局 头, 然后滑动 计算 头布局中 view 的位置 用 getTop 方法 得到的永远是刚初始化后  距离屏幕顶部的距离,或者说距离Activity顶部的距离。 即使 头布局已经滑动出去不可见了,用 getvisibility 也是 0 (可见)。 但是用 view.getLocationOnXX() 方法 可以获取到 实际位置,如果滑动出屏幕 获取的Y值为负值。达到 -295 好像就是最大,即使在滑动 也不会增加。

-----------------------------------------------------------------------------------------------------------------------------

2015/8/13


吐司   背景透明



public class AppToast {

	/** 弹窗类型:(如加入书签等) */
	public static enum TOAST_T {
		/*** 添加书签成功 */
		ADD_BOOKMARK_SUCCES,
		/** 锁屏 */
		ADD_LOCKSCREEN_SUCCES

	}

	public static void show(TOAST_T type, Context context, int duration) {

		Toast toast = new Toast(context);
		switch (type) {
		case ADD_BOOKMARK_SUCCES:
		case ADD_LOCKSCREEN_SUCCES:
			toast.setView(generateToast(context, type));
			break;

		default:
			break;
		}

		toast.setDuration(duration);
		toast.setGravity(Gravity.CENTER, 0, 0);
		toast.show();
	}

	public static View generateToast(Context context, TOAST_T type) {

		return generateToast(context, 350, 260, type, R.id.id01, R.drawable.img_share_qq_ricon, R.string.cartoon_instr_check_mark);
	}

	/**
	 * 
	 * @param context
	 *            : 上下文对象
	 * @param width
	 *            : Toast 的宽度 px
	 * @param height
	 *            : 吐司 的 高度
	 * @param type
	 *            : 类型
	 * @param picid
	 *            : 给 图片设置的 id
	 * @param picresid
	 *            : Imageview 的 资源 id
	 * @param botoomtextresid
	 *            : 底部文字 的 资源 id.
	 * @return
	 */
	private static View generateToast(Context context, int width, int height, TOAST_T type, int picid, int picresid, int botoomtextresid) {
		RelativeLayout parentView = new RelativeLayout(context);
		RelativeLayout.LayoutParams mParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		parentView.setLayoutParams(mParams);
		// toast 设置背景
		RelativeLayout childView = new RelativeLayout(context);
		childView.setBackgroundResource(R.drawable.shape_toast_bg_tanslucent);

		RelativeLayout.LayoutParams mChildParams = new RelativeLayout.LayoutParams(width, height);
		mChildParams.addRule(RelativeLayout.CENTER_VERTICAL);
		childView.setLayoutParams(mChildParams);

		// 是否添加文字。
		switch (type) {
		case ADD_BOOKMARK_SUCCES:  

			// 添加底部 已经加入书单文字
			TextView bottomText = new TextView(context);
			bottomText.setText(botoomtextresid);
			// mWatchCartoonTextView.setTextColor(android.R.color.white);
			RelativeLayout.LayoutParams mTextViewParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
			mTextViewParams.addRule(RelativeLayout.CENTER_IN_PARENT);
			mTextViewParams.addRule(RelativeLayout.BELOW, picid);

			mTextViewParams.setMargins(0,DemiUitls.dip2px(context,  5), 0, 0);
			childView.addView(bottomText, mTextViewParams);
			
			
			break;
		case ADD_LOCKSCREEN_SUCCES:// 锁屏 更换 图片 
			
			picresid=R.drawable.img_share_friend_circle;
			
		default:
			break;
		}
		// 添加 图片资源
		ImageView imageView = new ImageView(context);
		imageView.setId(picid);
		imageView.setBackgroundResource(picresid);
		RelativeLayout.LayoutParams imageParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		imageParams.addRule(RelativeLayout.CENTER_IN_PARENT);
		childView.addView(imageView, imageParams);

		parentView.addView(childView);
		return parentView;
	}

}



背景 :

<?xml version="1.0" encoding="utf-8"?>
<shape
  xmlns:android="http://schemas.android.com/apk/res/android">
    <corners 
    	android:radius="6dp"
    	/>
    <padding 
    	android:left="5dp"
    	android:top="5dp"
    	android:right="5dp"
    	android:bottom="5dp"
    	/>
    <solid 
    	android:color="#b0000000"
    	/>
</shape>

PS: 嵌套一层保平安-----------代码生成的布局 嵌套了一层 relativelayout。   如果用layout 布局写 也一定要嵌套一层,   否则 toast 大小只会按照包裹的 实际大小显示,无法按你自己想要的大小显示。

-----------------------------------------------------------------------------------------------------------------------------

2015/8/14


scrollview 滑动, 渐显  渐 隐 标题栏




这是 从 一款 ios app 上看到的,就是 讲标题栏 设置一下 透明。 随着 向上滑动 而 逐渐 显现 ,向下滑动逐渐隐藏

	mTitleLayout.getBackground().setAlpha();

给一个 标题,默认隐藏 ,或者 透明,然后 逐渐 改变 一下透明度

 void android.graphics.drawable.Drawable.setAlpha(int alpha)
Specify an alpha value for the drawable. 0 means fully transparent, and 255 means fully opaque

范围 0-255.

如果 滑动的 view  有 setOnScrollListener 事件,那么只要 获取一下onscroll 方法 中返回的 宽高,即可 根据 宽高  设置透明度。 

如果是 ScrollView,本身没有 setOnScrollListener 那么就需要自己去 创建一个类似的方法


package com.dmzj.manhua.views;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

/**
 * 带有 scrolllistener 的 scrollview ,默认 scrollview 没有 scrolllistener
 * 
 * @author  jorge
 * 
 */
public class CommonScrollView extends ScrollView {

	private ScrollViewListener scrollViewListener = null;

	public interface ScrollViewListener {

		void onScrollChanged(int left, int top, int oldleft, int oldtop);

	}

	public CommonScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public CommonScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	public CommonScrollView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public void setScrollViewListener(ScrollViewListener scrollViewListener) {
		this.scrollViewListener = scrollViewListener;
	}

	@Override
	protected void onScrollChanged(int left, int top, int oldleft, int oldtop) {

		super.onScrollChanged(left, top, oldleft, oldtop);
		
		if(scrollViewListener!=null){
			scrollViewListener.onScrollChanged(left, top, oldleft, oldtop);
		}
	}

}

如onScrollChanged 方法 是 Protected  那么 我们就根据这个方法 把 返回值 传递出去。


-----------------------------------------------------------------------------------------------------------------------------

2015/8/17


项目中通用的 弹窗


package com.dmzj.manhua.views;

import android.app.Activity;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.dmzj.manhua.R;
import com.dmzj.manhua.utils.DemiUitls;

/**
 * 通用的弹窗 (eg:漫画订阅弹窗,浏览记录弹窗)
 * 用法:
 *  1.   CommonDialog diaolg=new CommonDialog   初始化
 *  2.   diaolg.showDialog()   展示      具体 展示内容    在  generateLayout()方法 的 switch 中 根据DIALOG_TYPE  添加
 *  3.   mHandler.sendEmptyMessage(itemid); 每一条的  点击事件 到 具体调用界面 , what 为 该条目布局 RelativeLayout 设置的  id。
 * @author jorge
 *
 */
public class CommonDialog extends BaseDialog {

	/*** 排行类型 **/
	public static enum DIALOG_TYPE {
		DIALOG_CARTOON_SUBSCRIBE, // 漫画订阅 弹窗
		DIALOG_BROWSE_HISTORY, // 浏览历史 弹窗
	}

	private Activity mActivity;
	private Handler mHandler;

	/**
	 * 不自定义  样式 
	 * @param context : 上下文对象
	 * @param handler :Handler 对象
	 * @param type   :弹窗的类型
	 */
	public CommonDialog(Activity context, Handler handler, DIALOG_TYPE type) {
		super(context);
		this.mHandler = handler;

		mActivity = context;

		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.setContentView(generateLayout(type));
	}
	/**
	 * 带有dialog  theme
	 * @param context  : 上下文对象
	 * @param theme :  style
	 * @param inflater:Handler 对象
	 * @param type  :弹窗的类型
	 */
	public CommonDialog(Activity context, int theme, Handler handler, DIALOG_TYPE type) {
		super(context, theme);
		this.mHandler = handler;

		mActivity = context;

		this.requestWindowFeature(Window.FEATURE_NO_TITLE);

		this.setContentView(generateLayout(type));

		// setlistener();
	}

	/**
	 * 展示  弹窗 , 具体 出现的位置  窗体 居中。
	 */
	@Override
	public void showDialog() { // 展示位置
		super.showDialog();
		Window window = this.getWindow();
		window.setGravity(Gravity.CENTER);
		this.setCanceledOnTouchOutside(false);
		window.setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		// window.setLayout(mActivity.getWindowManager().getDefaultDisplay().getWidth(),
		// LayoutParams.WRAP_CONTENT);

	}

	/**
	 * @param textresid  : 文字  在 String.xml 中的  资源id.
	 * @param lefticonid : 图标   的 资源id  (eg: R.drawble.ic_launcher)
	 * @param itemid     :  条目Relativelayout 的id ,  用法  根据 id  去实现 每条的 点击事件
	 * @return
	 */
	public RelativeLayout generateItemLayot(int textresid, int lefticonid, final int itemid) {
		// 左右边距
		int magrin = (int) mActivity.getResources().getDimension(R.dimen.common_ui_horizontal_marg);
		// 观看动漫
		RelativeLayout mItemLayout = new RelativeLayout(mActivity);
		
		mItemLayout.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				mHandler.sendEmptyMessage(itemid);
				CommonDialog.this.dismiss();
			}
		});
		mItemLayout.setId(itemid);
		RelativeLayout.LayoutParams mItemParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, mActivity.getResources().getDimensionPixelSize(R.dimen.view_titlebar_hei));
		mItemParams.addRule(RelativeLayout.CENTER_VERTICAL);
		mItemLayout.setLayoutParams(mItemParams);

		// 添加 左边图标
		MyImageView mToggleButton = new MyImageView(mActivity);
		mToggleButton.setId(lefticonid);
		mToggleButton.setImageResource(lefticonid);
		RelativeLayout.LayoutParams mToggleParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		mToggleParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
		mToggleParams.addRule(RelativeLayout.CENTER_VERTICAL);
		mToggleParams.setMargins(DemiUitls.dip2px(mActivity, magrin), 0, 0, 0);
		mItemLayout.addView(mToggleButton, mToggleParams);
		// 添加描述文字
		TextView mWatchCartoonTextView = new TextView(mActivity);
		mWatchCartoonTextView.setText(textresid);
		mWatchCartoonTextView.setTextColor(R.color.comm_gray_high);
		RelativeLayout.LayoutParams mTextViewParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		mTextViewParams.addRule(RelativeLayout.RIGHT_OF, lefticonid);
		mTextViewParams.addRule(RelativeLayout.CENTER_VERTICAL);
		mTextViewParams.setMargins(DemiUitls.dip2px(mActivity, magrin), 0, 0, 0);
		mItemLayout.addView(mWatchCartoonTextView, mTextViewParams);
		// 头部内容添加底部线
		ImageView headerBottm = new ImageView(getActivity());
		headerBottm.setBackgroundResource(R.drawable.common_divider_line_black);
		RelativeLayout.LayoutParams headerBottmp = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		headerBottmp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
		mItemLayout.addView(headerBottm, headerBottmp);

		mItemLayout.setClickable(true);
		mItemLayout.setBackgroundResource(R.drawable.selector_shape_white_gray_low_small);

		return mItemLayout;
	}

	/**
	 * 生成 弹窗  body
	 * @param type  弹窗类型
	 * @return :view
	 */
	public LinearLayout generateLayout(DIALOG_TYPE type) {

		LinearLayout mParentLayout = new LinearLayout(mActivity);
		LinearLayout.LayoutParams mParentParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		mParentLayout.setLayoutParams(mParentParams);
		mParentLayout.setBackgroundResource(R.drawable.shape_commdialog_bg_white);
		// 标题栏
		mParentLayout.setOrientation(LinearLayout.VERTICAL);
		switch (type) {
		case DIALOG_CARTOON_SUBSCRIBE:
			mParentLayout.addView(generateItemLayot(R.string.cartoon_instr_start_read, R.drawable.img_icon_clock, R.id.id11)); // 看漫画
			mParentLayout.addView(generateItemLayot(R.string.cartoon_instr_order, R.drawable.img_icon_clock, R.id.id12)); // 下载漫画
			break;
		case DIALOG_BROWSE_HISTORY:
			mParentLayout.addView(generateItemLayot(R.string.txt_cartoon_dir, R.drawable.img_icon_clock, R.id.id13)); // 看小说
			mParentLayout.addView(generateItemLayot(R.string.txt_direct_look, R.drawable.img_icon_clock, R.id.id13)); // 看小说
			mParentLayout.addView(generateItemLayot(R.string.txt_delete_record, R.drawable.img_icon_clock, R.id.id13)); // 看小说
			mParentLayout.addView(generateItemLayot(R.string.txt_all_cases, R.drawable.img_icon_clock, R.id.id13)); // 看小说
			break;

		default:
			break;
		}

		return mParentLayout;

	}


}


 去除Dialog 的黑色背景 和 边框  添加 style

<style name="dialog" parent="@android:style/Theme.Dialog">  
<item name="android:windowFrame">@null</item>  
<item name="android:windowIsFloating">true</item>  
<item name="android:windowIsTranslucent">false</item>  
<item name="android:windowNoTitle">true</item>  
<item name="android:background">@null</item>  
<item name="android:backgroundDimEnabled">false</item>  
<item name="android:windowBackground"> @android:color/transparent </item>
</style>



android:windowFrame :Dialog的windowFrame框为无 
android:windowIsFloating :是否浮现在activity之上
android:windowIsTranslucent :是否半透明
android:windowNoTitle :是否显示
titleandroid:windowBackground :设置dialog的背景
android:backgroundDimEnabled : 对话框的背景变暗


-----------------------------------------------------------------------------------------------------------------------------

2015/8/18


getResources().getDimensionPixelSize

getResources().getDimension


都是 根据 资源 的 dp与  手机 分辨率 转换成 Pixel 不同点  是  getDimensionPixelSize返回类型int, getDimension返回类型 float。


 public static float applyDimension(int unit, float value,
                                       DisplayMetrics metrics)
    {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }


相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页