一些小东西(持续更新)
2018-02-28 16:32
507 查看
其他的东西:
1’按 win+X 组合键或右键点击开始菜单按钮,打开CMD选择(命令提示符) (管理员) (必须要用管理员身份运行,要不然权限不够)
2,转到2016安装目录(复制进去按回车键):cd C:\Program Files\Microsoft Office\Office16
注意:64位: cd C:\Program Files\Microsoft Office\Office16
32位:cd C:\Program Files (x86)\Microsoft Office\Office16
3,先运行cscript ospp.vbs /dstatus 显示已安装KEY的状态,这里只显示KEY的后5位。
4,把要卸载的KEY用命令cscript ospp.vbs /unpkey:XXXXX(KEY后5位)卸载。
0、一个好用的压缩工具(LuBan)
github地址:https://github.com/Curzibn/Luban# 0.0:准备
compile 'top.zibin:Luban:1.0.9' compile 'io.reactivex:rxandroid:1.2.1' compile 'io.reactivex:rxjava:1.1.6'
0.1:使用:
private void GearImage(File file){ Luban.get(this) .load(file) //传人要压缩的图片 .putGear(Luban.THIRD_GEAR) //设定压缩档次,默认三挡 .setCompressListener(new OnCompressListener() { //设置回调 @Override public void onStart() { showMyDialog();//开始压缩,这里可以添加一个loading } @Override public void onSuccess(File file) {//压缩结束 // 隐藏loading hideMyDialog(); // 拿到file headImgfile=file; // 使用Glide显示图片 GlidePicUtils.CircleHeadPic(mContext, headImgfile.getPath(), childrenimg); } @Override public void onError(Throwable e) {//失败 //隐藏loading hideMyDialog(); // 提示用户 T.shortToast(mContext,getResources().getString(R.string.text_editdekaron_nopic)); } }).launch(); //启动压缩 }
1、设置App打开之后的白屏,这里设置了一个图片
<style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 将splash图片设置在这,这样这张图片取代白屏 --> <item name="android:windowBackground">@drawable/loading</item> <!--去掉电池电量条 --> <!--<item name="android:windowFullscreen">true</item> --> <!-- 或者是将主题设置成透明,虽然点击图标会有点小小的卡顿,但是用户体验不影响 --> <!-- <item name="android:windowIsTranslucent">true</item> --> <!-- 透明背景不要了 --> </style>
2、在android6.0(api 23)之后找不到org.apache.http.xxx包
在app里边的build.gradle中添加userLibrary ‘org.apache.http.legacy’3、在使用Fragment的时候,有时需要及时刷新数据,来重写这个方法试试吧。
@Override public void setUserVisibleHint(boolean isVisibleToUser) { //判断该Fragment时候已经正在前台显示 通过这两个判断,就可以知道什么时候去加载数据了 if (isVisibleToUser && isVisible()) { //这里去加载数据 } super.setUserVisibleHint(isVisibleToUser); }
4、屏幕方向
1、判断屏幕方向
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // 竖屏 // 竖屏时doSomrthing } else { // 横屏时dosomething } supportRequestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_bigpic); }
2、设置屏幕方向
方法一:在AndroidManifest.xml中配置如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数:
“unspecified”:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
“landscape”:横屏显示(宽比高要长)
“portrait”:竖屏显示(高比宽要长)
“user”:用户当前首选的方向
“behind”:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
“sensor”:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
“nosensor”:忽略物理感应器,这样就不会随着用户旋转设备而更改了(”unspecified”设置除外)。
方法二:在java代码中设置
设置横屏代码:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏
设置竖屏代码:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
因为横屏有两个方向的横法,而这个设置横屏的语句,如果不是默认的横屏方向,会把已经横屏的屏幕旋转180°。
所以可以先判断是否已经为横屏了,如果不是再旋转,不会让用户觉得转的莫名其妙啦!代码如下:
if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
5、需要在TextView旁边放一个图片。但是距离太近了。
xml文件中这样://设置距离 android:drawablePadding="@dimen/px_10" //设置图片 android:drawableLeft="@drawable/nav_location"
6、Edittext的一些属性。
//设置光标在左上角 android:gravity="top" //设定光标为显示/隐藏,默认显示 android:cursorVisible="true" //设置允许输入哪些字符。如“1234567890.+-*/% ()” android:digits="1234567890.+-*/% ()"
限制只能输入中文:
String文件:
<string name="rule_password">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`¬!"£$%^*()~=#{}[];':,./?/*-_+<>@&</string>
然后在edittext中设置上文说到的digits属性
7、View.setVisibility的三种状态:
invisible: View 不可见,占位置; visible : View 可见,占位置; gone : View 不可见,不占位置;
8、一个自定义的Toast,可以把自己的layout用Toast的方式显示出来:
private static Toast mToast; /** * @param mContext * @param duration 显示时间 * @param layout 布局 * @return */ public static void showToast(Context mContext,int duration,int layout) { if (mToast != null) { mToast.cancel(); mToast = null; } View view = LayoutInflater.from(mContext).inflate(layout, null); mToast = new Toast(mContext); //设置显示的位置 mToast.setGravity(Gravity.CENTER, 0, 2); //设置显示时间 mToast.setDuration(duration); mToast.setView(view); mToast.show(); }
效果图:
9、Glide的一些简单用法:
Glide.with(LoginActivity.this) .load("http://4493bz.1985t.com/uploads/allimg/150127/4-15012G52133.jpg") .diskCacheStrategy(DiskCacheStrategy.ALL)//设置缓存(缓存源资源和转换后的资源) //// .diskCacheStrategy(DiskCacheStrategy.NONE)//设置缓存(不作任何磁盘缓存) //// .diskCacheStrategy(DiskCacheStrategy.SOURCE)//设置缓存(缓存源资源) //// .diskCacheStrategy(DiskCacheStrategy.RESULT)//设置缓存(缓存转换后的资源) // .transform(new GlideRoundTransform(mContext))//圆角图片 .transform(new GlideCircleTransform(this))//圆形图片 .placeholder(R.mipmap.ic_launcher)//加载中的图片 .error(R.mipmap.ic_launcher)//加载失败的图片 .thumbnail(0.1f)//先加载缩略图,再加载大图 // .override(800, 800)//设置加载图片尺寸 // .skipMemoryCache(true)//跳过内存缓存 .into(heatview);
10、弹出选择框后,把页面其他位置变暗:
//设置其他部分阴暗效果,在回调之后设置为1 WindowManager.LayoutParams params=mActivity.getWindow().getAttributes(); params.alpha=0.5f;//阴暗效果 mActivity.getWindow().setAttributes(params);
效果图:
11、动态设置控件大小:
RecyclerView.LayoutParams linearParams = (RecyclerView.LayoutParams) HeadView.getLayoutParams(); //取控件textView当前的布局参数 linearParams.width = ScreenUtils.getScreenWidth(getActivity());// 控件的宽强制设成30 HeadView.setLayoutParams(linearParams); //使设置好的布局参数应用到控件
哦,然后就遇到问题了,在有些view中获取的LayoutParams为null,这是因为vewi还没有加载完。这时候就出现空指针了。这样,给view设置一个观察树。等view加载完了之后再去设置大小。具体代码如下:
//动态设置headerview的大小,给headerview添加一个观察树 ViewTreeObserver viewTreeObserver = HeadView.getViewTreeObserver(); //当veiw被加载完成之后,调用该方法回调,这时候去设置veiw的大小 viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { RecyclerView.LayoutParams linearParams = (RecyclerView.LayoutParams) HeadView.getLayoutParams(); //取控件textView当前的布局参数 linearParams.width = ScreenUtils.getScreenWidth(getActivity());// 控件的宽强制设成30 HeadView.setLayoutParams(linearParams); //使设置好的布局参数应用到控件 } });
12、在Fragment中使用 FragmentManager要使用getChildFragmentManager():
//使用 SimpleFragmentPagerAdapter pagerAdapter = new SimpleFragmentPagerAdapter( getChildFragmentManager(), getActivity(),list_fragment,list_title); //构造方法 public SimpleFragmentPagerAdapter(FragmentManager fm,Context context,ArrayList<Fragment> mList,ArrayList<String> mListString) { super(fm); this.context = context; this.mList = mList; this.mListString = mListString; }
13、要去加载一个带有标签的webview
myWeb.setWebViewClient(new WebViewClient() { public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ handler.proceed(); // 接受所有网站的证书 } }); myWeb.getSettings().setJavaScriptEnabled(true); myWeb.loadDataWithBaseURL(null,mBean.getData().getAdDetails().getContent(), "text/html", "utf-8", null);
14、进入activity,Edittext占用焦点,键盘总是弹出来,在AndroidMainfest.xml文件中添加这句。
android:windowSoftInputMode="stateHidden"
15、Edittext输入两位小数,只能输入一个小数点,第一个数字是0的时候(不能输入其他数字,不能连续输入两个0)
mInPoints.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().contains(".")) { if (s.length() - 1 - s.toString().indexOf(".") > 2) { s = s.toString().subSequence(0, s.toString().indexOf(".") + 3); mInPoints.setText(s); mInPoints.setSelection(s.length()); } } if (s.toString().trim().substring(0).equals(".")) { s = "0" + s; mInPoints.setText(s); mInPoints.setSelection(2); } if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { if (!s.toString().substring(1, 2).equals(".")) { mInPoints.setText(s.subSequence(0, 1)); mInPoints.setSelection(1); return; } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
16、6.0以后的蓝牙权限,需要另外加上这个!
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
17、swiperefreshlayout与scrollview的冲突
原理很简单:就是在scrollview还没有到达第一条数据顶部的时候,就设置swipeRefreshLayout为不可操作状态,那么检测swipeRefreshLayout的滚动分发就不起作用了,就达到我们需要的目的了。代码如下:if (myScroll != null) { myScroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { if (me_swipe != null) { me_swipe.setEnabled(myScroll.getScrollY() == 0); } } }); }
18、Android studio 查看sha1
1、cd 到 .Android 目录下2、输入: keytool -list -keystore debug.keystore
C:\Users\Administrator.android>keytool -list -keystore debug.keystore
3、输入密码,密码是不显示的,输入正确回车就可以了
密码:android (默认密码)
19、TextView划线
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线 textView.getPaint().setAntiAlias(true);//抗锯齿 textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG); //中划线 setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG); // 设置中划线并加清晰 textView.getPaint().setFlags(0); // 取消设置的的划线
20、onActivityResult不执行问题
如果Activity 的加载启动模式(launchMode )是SingleTask或者 SingleInstance,会导致onActivityResult()没有调用。修改启动模式为singleTop或者标准。原因是:设置为 launchmode=”SingleTask”,系统将在 startActivityForResult() 后直接调用 onActivityResult()。21、在Scrollview中用到一个listview之列的控件,总是到ScrollView的底步,原因是listview获取了焦点。给控件设置这个属性。
listaddeq.setFocusable(false);
22、事件分发机制的一个视频连接
https://ke.qq.com/webcourse/index.html?from=qqchat#course_id=166061&term_id=100193159&taid=917065712175277&vid=w1414asmavu&ADUIN=1538818231&ADSESSION=1495671726&ADTAG=CLIENT.QQ.5515_.0&ADPUBNO=2665723、ListView的一些属性:
android:dividerHeight="10dp" //设置分割线高度 android:divider="@color/colorAccent"//设置分割线颜色 android:divider="@null"//透明分割线 android:scrollbars="none"//隐藏滚动条 android:listSelector="#00000000"//隐藏Item的点击效果 android:listSelector="@android:color/transparent"//隐藏Item的点击效果 //设置需要显示第几个item mListView.setSelection(50);//瞬间完成 mListView.smoothScrollToPosition(100);//平滑移动 View mView=mListView.getChildAt(0);//取到第0个item的view mListView.getLastVisiblePosition();//当前区域的最后一个可见的item mListView.getFirstVisiblePosition();//当前区域的第一个可见的item //带有弹性效果的listview,自定义Listvewi,然后重写方法: @Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, 200, isTouchEvent); } //listview的滚动事件 mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { switch (i){ case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: //停止滑动 break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: //正在滑动 break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: //手指松开,listview由于惯性继续滑动 break; } } @Override public void onScroll(AbsListView absListView, int i, int i1, int i2) { //i 能看到的第一个Item的是第几个 //i1 当前页面能看到的item的数量 //i2 listveiw一共有多少个item if(i+i1==i2&&i2-总数>0){ //这时候就滑动到了最后一个 } } });
24、hellowcharts的简单实用:
1、导入
compile 'com.github.lecho:hellocharts-library:1.5.8@aar'
2、xml文件
<lecho.lib.hellocharts.view.LineChartView android:id="@+id/test_chart" android:layout_width="match_parent" android:layout_height="match_parent" />
3、activity
import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import java.util.ArrayList; import java.util.List; import lecho.lib.hellocharts.gesture.ContainerScrollType; import lecho.lib.hellocharts.gesture.ZoomType; import lecho.lib.hellocharts.model.Axis; import lecho.lib.hellocharts.model.AxisValue; import lecho.lib.hellocharts.model.Line; import lecho.lib.hellocharts.model.LineChartData; import lecho.lib.hellocharts.model.PointValue; import lecho.lib.hellocharts.model.ValueShape; import lecho.lib.hellocharts.view.LineChartView; public class MainActivity extends AppCompatActivity { LineChartView mLineChartView; ArrayList <Line> mLines=new ArrayList<>(); private List<AxisValue> mAxisXValues = new ArrayList<AxisValue>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mLineChartView= (LineChartView) findViewById(R.id.test_chart); Line line = new Line(addV()).setColor(Color.BLUE);//声明线并设置颜色 line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状 这里是圆形 (有三种 :ValueShape.SQUARE ValueShape.CIRCLE ValueShape.DIAMOND) line.setCubic(true);//曲线是否平滑,即是曲线还是折线 line.setFilled(true);//是否填充曲线的面积 line.setHasLabels(true);//曲线的数据坐标是否加上备注 // line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效) line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示 line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点) mLines.clear(); mLines.add(line); mLineChartView.setInteractive(false);//设置图表是可以交互的(拖拽,缩放等效果的前提) mLineChartView.setZoomType(ZoomType.HORIZONTAL_AND_VERTICAL);//设置缩放方向 mLineChartView.setMaxZoom((float) 2);//最大方法比例 mLineChartView.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL); LineChartData data = new LineChartData(); Axis axisX = new Axis();//x轴 axisX.setHasTiltedLabels(true); //X坐标轴字体是斜的显示还是直的,true是斜的显示 axisX.setTextColor(Color.WHITE); //设置字体颜色 //axisX.setName("date"); //表格名称 axisX.setTextSize(10);//设置字体大小 axisX.setMaxLabelChars(8); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length axisX.setValues(mAxisXValues); //填充X轴的坐标名称 data.setAxisXBottom(axisX); //x 轴在底部 //data.setAxisXTop(axisX); //x 轴在顶部 axisX.setHasLines(true); //x 轴分割线 Axis axisY = new Axis();//y轴 axisY.setName("");//y轴标注 axisY.setTextSize(10);//设置字体大小 data.setAxisYLeft(axisY); //Y轴设置在左边 //data.setAxisYRight(axisY); //y轴设置在右边 data.setAxisXBottom(axisX); data.setAxisYLeft(axisY); data.setLines(mLines); mLineChartView.setLineChartData(data);//给图表设置数据 } /** * 初始化折线上的点 * @return */ private ArrayList<PointValue> addV(){ ArrayList<PointValue> values = new ArrayList<PointValue>();//折线上的点 values.add(new PointValue(0, 200)); values.add(new PointValue(1, 4)); values.add(new PointValue(2, 300)); values.add(new PointValue(3, 50)); values.add(new PointValue(4, 100)); values.add(new PointValue(5, 150)); values.add(new PointValue(6, 70)); return values; } }
4、参考地址
http://blog.csdn.net/androidtalent/article/details/5229005125、环境变量:
1、 新建java_home
C:\Program Files (x86)\Java\jdk1.7.0_15(jdk的路径)2、 编辑path
;%java_home%\bin(在最后加上)3、 新建classpath
.;%java_home%\lib26、Fragment使用hind()、show()方法切换fragment的时候出现重叠现象:
1、 定义一个变量
int position=0;
2、 添加如下方法
@Override protected void onSaveInstanceState(Bundle outState) { //记录当前的position outState.putInt("position", position); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { position = savedInstanceState.getInt("position"); switchFragment(position); super.onRestoreInstanceState(savedInstanceState); }
3、别忘记了在切换fragment的时候更改position的值
26、Fragment中动态申请权限不走onRequestPermissionsResult方法:
先看代码:activity:
// 申请授权 ActivityCompat.requestPermissions(PersonalDataActivity.this, stringPermissions, REQUEST_PERMISSION_CAMERA_6_0);
fragment
// 申请授权 HomeFragment.getInstance().requestPermissions(stringPermissions, REQUEST_PERMISSION_CAMERA_6_0);
fragment不能用activity去申请权限的,要用fragment去申请,这样才走自己的方法。还有fragment,startActivityForResult方法也是这样。
27、设置activity禁止截图/录屏:
//设置禁止截图,禁止录屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); setContentView(R.layout.activity_main);
通过代码中的flags,有以下三个效果:
1.阻止屏幕截图
2.在Recent apps(任务切换界面)中只显示应用名字和图标, 不显示内容
3.Google App的Now on tap功能不会去分析你的页面的内容
相关文章推荐
- jvm中一些有用的系统变量(持续更新)
- 最近练习的一些算法(持续更新)
- 收集的一些编程网站——持续更新中......
- 流媒体开发的一些参考资料--持续更新
- 关于功能自动化测试的一些想法(持续更新ing)
- 关于字典转模型的一些思考(持续更新中)
- Mac OS 下一些配置修改(持续更新)
- 一些常用JavaScript方法的重写 持续更新中
- 一些 Shell 脚本(持续更新)
- 一些简单编程练习题P【持续更新】
- 一些常用的命令总结(持续更新)
- android 开发中遇到的一些小的知识点在此做一个记录(持续更新)
- 关于网页设计中的一些有趣网站--(持续更新)
- 收集的一些好的网址[持续更新]
- 关于面试的一些总结,持续更新
- [置顶] 对知识的一些理解<持续更新中>
- linux 系统相关的一些小知识点(持续更新)
- SQL Server 2000 一些有用的SQL语句搜集整理(持续更新 )
- JNI开发遇到的一些问题记录(持续记录更新)