// 關閉APP標題bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 關閉最上面的狀態bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//直行
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//AndroidManifest.xml
//橫行
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
//AndroidManifest.xml
2016年7月27日 星期三
Android 畫面設定
2016年7月24日 星期日
Javascript刷新頁面
出處
Javascript刷新頁面的幾種方法:
1 history.go(0)
2 location.reload()
3 location=location
4 location.assign(location)
5 document.execCommand('Refresh')
6 window.navigate(location)
7 location.replace(location)
8 document.URL=location.href
自動刷新頁面的方法:1.頁面自動刷新:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒刷新一次頁面.
2.頁面自動跳轉:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20;url=http://www.wyxg.com">
其中20指隔20秒後跳轉到http://www.wyxg.com頁面
3.頁面自動刷新js版
<script language="JavaScript">
function myrefresh()
{
window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒刷新一次
</script>
ASP.NET如何輸出刷新父窗口腳本語句1. this.response.write("<script>opener.location.reload();</script>");
JS刷新框架的腳本語句
//如何刷新包含該框架的頁面用
<script language=JavaScript>
parent.location.reload();
</script>
Javascript刷新頁面的幾種方法:
1 history.go(0)
2 location.reload()
3 location=location
4 location.assign(location)
5 document.execCommand('Refresh')
6 window.navigate(location)
7 location.replace(location)
8 document.URL=location.href
自動刷新頁面的方法:1.頁面自動刷新:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒刷新一次頁面.
2.頁面自動跳轉:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20;url=http://www.wyxg.com">
其中20指隔20秒後跳轉到http://www.wyxg.com頁面
3.頁面自動刷新js版
<script language="JavaScript">
function myrefresh()
{
window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒刷新一次
</script>
ASP.NET如何輸出刷新父窗口腳本語句1. this.response.write("<script>opener.location.reload();</script>");
2. this.response.write("<script>opener.window.location.href = opener.window.location.href;</script>");
3. Response.Write("<script language=javascript>opener.window.navigate(''你要刷新的頁.asp'');</script>")
JS刷新框架的腳本語句
//如何刷新包含該框架的頁面用
<script language=JavaScript>
parent.location.reload();
</script>
//子窗口刷新父窗口
<script language=JavaScript>
self.opener.location.reload();
</script>
( 或 <a href="javascript:opener.location.reload()">刷新</a> )
//如何刷新另一個框架的頁面用
<script language=JavaScript>
parent.另一FrameID.location.reload();</script>
如果想關閉窗口時刷新或者想開窗時刷新的話,在<body>中調用以下語句即可。
<body onload="opener.location.reload()"> 開窗時刷新
<body onUnload="opener.location.reload()"> 關閉時刷新
<script language="javascript">
window.opener.document.location.reload()
</script>
<script language=JavaScript>
self.opener.location.reload();
</script>
( 或 <a href="javascript:opener.location.reload()">刷新</a> )
//如何刷新另一個框架的頁面用
<script language=JavaScript>
parent.另一FrameID.location.reload();</script>
如果想關閉窗口時刷新或者想開窗時刷新的話,在<body>中調用以下語句即可。
<body onload="opener.location.reload()"> 開窗時刷新
<body onUnload="opener.location.reload()"> 關閉時刷新
<script language="javascript">
window.opener.document.location.reload()
</script>
C# 影像縮圖
/// <summary>自動縮圖</summary>
/// <param name="img">檔案本體</param>
/// <param name="filePath">存放位置</param>
/// <param name="fileName">檔案名稱</param>
protected void reDrawingImg(byte[] imgBuffer, string filePath, string fileName) {
System.Drawing.Image img = bufferToImage(imgBuffer);
ImageFormat thisFormat = img.RawFormat; //取得影像的格式
int[] newWH = imgReSize(img.Width, img.Height);
Bitmap imageOutput = new Bitmap(img, newWH[0], newWH[1]);
//縮圖後存放指定位址
imageOutput.Save(filePath + fileName, thisFormat);
imageOutput.Dispose(); //釋放記憶體
img.Dispose(); //釋放掉圖檔
}
/// <summary>將 byte[] 轉成 Image</summary>
/// <param name="Buffer">檔案本體 (byte[])</param>
private System.Drawing.Image bufferToImage(byte[] Buffer) {
byte[] data = null;
System.Drawing.Image oImage = null;
MemoryStream oMemoryStream = null;
Bitmap oBitmap = null;
//建立副本
data = (byte[])Buffer.Clone();
try {
oMemoryStream = new MemoryStream(data);
//設定資料流位置
oMemoryStream.Position = 0;
oImage = System.Drawing.Image.FromStream(oMemoryStream);
//建立副本
oBitmap = new Bitmap(oImage);
} catch {
throw;
}
finally {
oMemoryStream.Close();
oMemoryStream.Dispose();
oMemoryStream = null;
}
return oBitmap;
}
/// <summary>等比縮圖 - 計算長寬</summary>
/// <param name="width">原始寬度</param>
/// <param name="height">原始高度</param>
protected int[] imgReSize(double width, double height) {
int[] newWH = new int[2];
double rate, rWidth, rHeight;
if (width > height && width > 200) {
//水平圖
rWidth = 200;
rate = rWidth / width;
rHeight = height * rate;
newWH[0] = (int)rWidth;
newWH[1] = (int)rHeight;
}
else if (height > width && height > 150) {
//垂直圖
rHeight = 150;
rate = rHeight / height;
rWidth = width * rate;
newWH[0] = (int)rWidth;
newWH[1] = (int)rHeight;
}
else {
newWH[0] = (int)width;
newWH[1] = (int)height;
}
return newWH;
}
2016年7月21日 星期四
C# 網頁轉PDF
出處
[C#] 網頁Html轉PDF檔(一行程式碼解決)
- 61156
- .Net Framework
- 檢舉文章
- 2013-09-23
[C#] 網頁Html轉PDF檔(一行程式碼解決)
網頁轉PDF檔做法很多(Convert HTML to PDF in .NET)
這邊紀錄一下老外最多人加分的那篇做法,使用wkhtmtopdf(採GPL授權)可以省很多程式碼
找installer.exe下載,這邊Demo我是下載wkhtmltopdf-0.9.9-installer.exe
下載完後執行安裝它
選擇要安裝的路徑
安裝完成
(如果要解除安裝的話,就到剛剛安裝的資料夾下找uninstall.exe執行即可)
接著看它的原始使用方式
在安裝路徑下有個wkhtmltopdf.exe檔
到命令提示字元(開始→執行→cmd)
輸入
這邊就抓中國MSDN論壇網頁轉PDF為例
按下Enter轉換完成
打開剛剛轉換完成的PDF檔
該文字的地方就是文字,該圖片的地方就是圖片,該超連結的地方就是超連結
既然知道底層使用方式,那就可以使用
第一個參數傳執行檔路徑,第二個傳參數(URL和PDF檔的存放路徑)
如下:
protected void Button1_Click(object sender, EventArgs e)
{
//因為是兩個argument,所以記得要空格
System.Diagnostics.Process.Start(@"D:\wkhtmltopdf\wkhtmltopdf.exe", @"http://msdn.microsoft.com/zh-cn D:\myFileName.pdf");
}
此小工具不會像WinForm的WebBrowser控制項一樣會共用IE瀏覽器的Cookie
而且要抓的網頁來源不一定要URL,也可以像這樣直接抓本機上的Html檔轉PDF
protected void Button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start(@"D:\wkhtmltopdf\wkhtmltopdf.exe", @"D:\index.html D:\myFileName.pdf");
}
只是抓本機的Html轉成PDF後,圖片會不見這點要注意
2016年7月19日 星期二
2016年7月17日 星期日
C# FileUpload預覽圖片
FileUpload上傳圖片前預遊覽圖片,使用javascript,相容多數遊覽器
FileUpload 上傳圖片前預遊覽圖片,使用 javascript,相容多數遊覽器
1030320測試IE8、Chrome可用
=============圖 示===================================
==============說 明=================================
Chrome、Firefox、IE10 使用FileReader秀圖。
IE6~9 要用濾鏡 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader 來秀圖
==============下面是code===============================
<head>
<style type="text/css">
#picview, .img, img
{
width:200px;
height:200px;
}
#picview
{
border:1px solid #000;
}
</style>
<script type="text/javascript">
function picview(file)
{
var picviewDiv = document.getElementById('picview');
if (file.files && file.files[0])
{
var reader = new FileReader();
reader.onload = function(evt){
picviewDiv.innerHTML = '<img src="' + evt.target.result + '" />';
}
reader.readAsDataURL(file.files[0]);
}
else
{
picviewDiv.innerHTML = '<div class="img" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + file.value + '\'"></div>';
}
}
</script>
</head>
<body>
<div id="picview"></div>
<asp:FileUpload ID="FileUpload1" runat="server" onchange="picview(this)" />
</body>
</html>出處
1030320測試IE8、Chrome可用
=============圖 示===================================
==============說 明=================================
Chrome、Firefox、IE10 使用FileReader秀圖。
IE6~9 要用濾鏡 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader 來秀圖
==============下面是code===============================
<head>
<style type="text/css">
#picview, .img, img
{
width:200px;
height:200px;
}
#picview
{
border:1px solid #000;
}
</style>
<script type="text/javascript">
function picview(file)
{
var picviewDiv = document.getElementById('picview');
if (file.files && file.files[0])
{
var reader = new FileReader();
reader.onload = function(evt){
picviewDiv.innerHTML = '<img src="' + evt.target.result + '" />';
}
reader.readAsDataURL(file.files[0]);
}
else
{
picviewDiv.innerHTML = '<div class="img" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src=\'' + file.value + '\'"></div>';
}
}
</script>
</head>
<body>
<div id="picview"></div>
<asp:FileUpload ID="FileUpload1" runat="server" onchange="picview(this)" />
</body>
</html>出處
2016年7月10日 星期日
Android 6.0 權限處理
出處
Android 6.0 运行时权限处理
运行时权限介绍
Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,
又新增了运行时权限动态检测,以下权限都需要在运行时判断:
又新增了运行时权限动态检测,以下权限都需要在运行时判断:
身体传感器
日历
摄像头
通讯录
地理位置
麦克风
电话
短信
存储空间
运行时权限处理
Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限,
所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃,
但这也只是一个临时的救急策略,用户还是可以在设置中取消授予的权限。
所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃,
但这也只是一个临时的救急策略,用户还是可以在设置中取消授予的权限。
- 声明目标SDK版本
我们需要在build.gradle中声明targetSdkVersion为23android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.yourcomany.app minSdkVersion 18 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
- 检查并申请权限
我们需要在用到权限的地方,每次都检查是否APP已经拥有权限,
比如我们有一个下载功能,需要写SD卡的权限,
我们在写入之前检查是否有WRITE_EXTERNAL_STORAGE权限,没有则申请权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE); }
- 请求权限后,系统会弹出请求权限的Dialog
- 用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); doNext(requestCode,grantResults); }
- 我们接着需要根据requestCode和grantResults(授权结果)做相应的后续处理
private void doNext(int requestCode, int[] grantResults) { if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted } else { // Permission Denied } } }
Fragment中运行时权限的特殊处理
- 在Fragment中申请权限,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否则会回调到Activity的onRequestPermissionsResult
- 如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方法,onRequestPermissionsResult不会回调回来,建议使用getParentFragment().requestPermissions方法,
这个方法会回调到父Fragment中的onRequestPermissionsResult,加入以下代码可以把回调透传到子Fragment@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); List<Fragment> fragments = getChildFragmentManager().getFragments(); if (fragments != null) { for (Fragment fragment : fragments) { if (fragment != null) { fragment.onRequestPermissionsResult(requestCode,permissions,grantResults); } } } }
相关开源项目
PermissionsDispatcher
使用标注的方式,动态生成类处理运行时权限,目前还不支持嵌套Fragment。
使用标注的方式,动态生成类处理运行时权限,目前还不支持嵌套Fragment。
RxPermissions
基于RxJava的运行时权限检测框架
基于RxJava的运行时权限检测框架
Grant
简化运行时权限的处理,比较灵活
简化运行时权限的处理,比较灵活
android-RuntimePermissions
Google官方的例子
Google官方的例子
附录
以下权限只需要在AndroidManifest.xml中声明即可使用
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT
2016年7月5日 星期二
Android下 spinner 更換字體大小、顏色
出處
Android下拉選單(spinner)應用(五) - 更換字體大小、顏色
一般網路上都會教一些基本下拉選單(spinner),套用simple_spinner_dropdown_item或
simple_spinner_item這些基本模板,但有時想改變Spinner內的文字大小及顏色又不知從哪下手
今天就來教大家怎麼改變Spinner內的文字大小及顏色,當然也包含對齊方式
我用比較簡單的方法直接由Layout下手去修改Spinner內文字的字體大小及顏色
步驟一:
在res-->layout內新增一個myspinner.xml的android xml檔,貼上下列程式碼
myspinner.xml
步驟二:
回到java程式碼,假設我們已經在main.xml中加入一個下拉選單spinner1了
基本的下拉選單都是這樣寫的:
換成下面這個樣子:
為什麼有兩個地方是要換成myspinner的呢?
因為adapter是代表內容(也就是下拉時)
setDropDownViewResource是代表靜止未點選下拉時的樣式(感謝網友指教)
setDropDownViewResource是代表點選下拉時彈出的樣式
執行後畫面
文字被我改為紫色、字體大小變32、置中對齊
這樣簡簡單單兩個步驟就能改變下拉選單的三種樣式設定了
以上介紹,謝謝各位!!
ps:貼上一些參數(spinner、adapter、Blood_group)的宣告,不然新手會對應不起來
simple_spinner_item這些基本模板,但有時想改變Spinner內的文字大小及顏色又不知從哪下手
今天就來教大家怎麼改變Spinner內的文字大小及顏色,當然也包含對齊方式
我用比較簡單的方法直接由Layout下手去修改Spinner內文字的字體大小及顏色
步驟一:
在res-->layout內新增一個myspinner.xml的android xml檔,貼上下列程式碼
myspinner.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
| <? xml version = "1.0" encoding = "utf-8" ?> android:id = "@android:id/text1" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:ellipsize = "marquee" android:gravity = "center" android:paddingLeft = "8dip" android:singleLine = "true" android:textColor = "#8B008B" android:textSize = "32sp" android:textStyle = "bold" > </ TextView > |
步驟二:
回到java程式碼,假設我們已經在main.xml中加入一個下拉選單spinner1了
基本的下拉選單都是這樣寫的:
1
2
3
4
5
6
7
8
| //將可選内容與ArrayAdapter連接起來 adapter = new ArrayAdapter<String>( this ,android.R.layout.simple_spinner_item,Blood_group); //對應控件 spinner = (Spinner) findViewById(R.id.spinner1); //設置下拉列表的風格 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //將adapter 添加到spinner中 spinner.setAdapter(adapter); |
換成下面這個樣子:
1
2
3
4
5
6
7
8
| //將可選内容與ArrayAdapter連接起來 adapter = new ArrayAdapter<String>( this ,R.layout.myspinner,Blood_group); //對應控件 spinner = (Spinner) findViewById(R.id.spinner1); //設置下拉列表的風格 adapter.setDropDownViewResource(R.layout.myspinner); //將adapter 添加到spinner中 spinner.setAdapter(adapter); |
為什麼有兩個地方是要換成myspinner的呢?
因為adapter是代表內容(也就是下拉時)
setDropDownViewResource是代表點選下拉時彈出的樣式
執行後畫面
文字被我改為紫色、字體大小變32、置中對齊
這樣簡簡單單兩個步驟就能改變下拉選單的三種樣式設定了
以上介紹,謝謝各位!!
ps:貼上一些參數(spinner、adapter、Blood_group)的宣告,不然新手會對應不起來
1
2
3
| private Spinner spinner; private ArrayAdapter<String> adapter; private static final String[] Blood_group={ "A型" , "B型" , "O型" , "AB型" , "其他" }; |
訂閱:
文章 (Atom)