一、簡(jiǎn)單自定義控件MyButton每一個(gè)控件都是一個(gè)java類,有對(duì)應(yīng)的代碼,只要你能正確的編寫java代碼,那么電腦培訓(xùn)發(fā)現(xiàn)可以創(chuàng)造出符合你需求的控件,即自定義控件。
永勝網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,永勝網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為永勝近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的永勝做網(wǎng)站的公司定做!
1.通過繼承的方式,創(chuàng)建自定義控件通過繼承一個(gè)現(xiàn)有的控件,覆蓋其界面的呈現(xiàn)???通過繼承一個(gè)包含若干子控件的布局通過繼承一個(gè)現(xiàn)有的控件,覆蓋某個(gè)響應(yīng)事件???繼承一個(gè)View來完整自定義一個(gè)心控件?2.使你的自定義控件繼承自某個(gè)最接近的Android控件,必須是public?一般都會(huì)調(diào)用父類的構(gòu)造方法,注意一般有三個(gè)構(gòu)造方法覆蓋原來控件的方法,注意是否要再調(diào)用super中的方法在XML中以類全名的方式引用此控件二、復(fù)雜自定義控件MyLogin需要設(shè)計(jì)包含一組控件的自定義控件就需要用到復(fù)雜的自定義控件1)???使得你的自定義控件繼承自某個(gè)接近的布局2)???正確的實(shí)現(xiàn)構(gòu)造方法:構(gòu)造方法中實(shí)例化目標(biāo)布局,同時(shí)查找到各個(gè)子布局3)???添加相應(yīng)的響應(yīng)代碼來修改屬性,使得外部能訪問布局中的子控件4)???在XML中以類全名的方式引用此控件,完整的包名+類名。
給你寫個(gè)最簡(jiǎn)單的吧,其實(shí)和XML布局是一樣的。都是在LinearLayout、RelativeLayout這些布局中加控件,不同的是java代碼都是new 出來的對(duì)象。例子:
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(0, 0, 0, 0);
layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Button btn = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, 0);
btn.setLayoutParams(params);
layout.addView(btn);
你可以直接新建一個(gè)類,這個(gè)類實(shí)現(xiàn)你所要監(jiān)聽的事件接口,監(jiān)聽的時(shí)候直接實(shí)例化這個(gè)類當(dāng)作參數(shù)傳到綁定事件的方法內(nèi)就可以了
窗口類:
public class TestWindow extends javax.swing.JFrame {
public TestWindow() {
initComponents();
}
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("OK");
//綁定事件
jButton1.addActionListener(new ActionListenerButton());
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addGap(87, 87, 87)
.addComponent(jButton1)
.addContainerGap(262, Short.MAX_VALUE)));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup()
.addGap(83, 83, 83)
.addComponent(jButton1,
javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(178, Short.MAX_VALUE)));
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestWindow().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
}
監(jiān)聽實(shí)現(xiàn)類:
public class ActionListenerButton implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Hello world");
}
}
在Android的開發(fā)過程中、遇到一個(gè)新需求、那就是讓Java代碼和Javascript代碼進(jìn)行交互、在IOS中實(shí)現(xiàn)起來很麻煩、而在Android中相對(duì)來說容易、Android對(duì)這種交互進(jìn)行很好的封裝、其實(shí)可以很簡(jiǎn)單的用Java代碼調(diào)用WebView中的js函數(shù)、也可以用WebView中的js來調(diào)用Android應(yīng)用中的Java代碼
一、網(wǎng)頁的JS代碼調(diào)用ANDROID中JAVA代碼的方法
在網(wǎng)頁中調(diào)用java代碼、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//啟用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js對(duì)象名");
在Activity中定義一個(gè)要被js調(diào)用的方法、src為js傳遞過來的參數(shù)、如果沒有不傳也可以的。
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里對(duì)Android應(yīng)用的UI進(jìn)行處理
}
});
}
在網(wǎng)頁中、只需要像調(diào)用js方法一樣、進(jìn)行調(diào)用就可以
a onClick="window.js對(duì)象名.jsFunction(′hello world′)"
點(diǎn)擊調(diào)用java代碼并傳遞參數(shù)
/a
二、ANDROID中JAVA代碼調(diào)用網(wǎng)頁的JS代碼的方法
Java代碼調(diào)用js并傳參其實(shí)是通過WebView的loadUrl方法去調(diào)用的、只是參數(shù)url的寫法不一樣
// 無參數(shù)調(diào)用
contentWebView.loadUrl("javascript:javacalljs()");
// 傳遞參數(shù)調(diào)用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "′hello world′" + ")");
三、JAVA和JS交互注意事項(xiàng)
1、Java 調(diào)用 js 里面的函數(shù)、效率并不是很高、估計(jì)要200ms左右吧、做交互性很強(qiáng)的事情、這種速度很難讓人接受、而js去調(diào)Java的方法、速度很快、50ms左右、所以盡量用js調(diào)用Java方法
2、Java 調(diào)用 js 的函數(shù)、沒有返回值、調(diào)用就控制不到
3、Js 調(diào)用 Java 的方法、返回值如果是字符串、你會(huì)發(fā)現(xiàn)這個(gè)字符串是 native 的、轉(zhuǎn)成 locale 的才能正常使用、使用 toLocaleString() 函數(shù)就可以、不過這個(gè)函數(shù)的速度并不快、轉(zhuǎn)化的字符串如果很多、將會(huì)很耗費(fèi)時(shí)間
4、網(wǎng)頁中盡量不要使用jQuery、執(zhí)行起來需要5-6秒、最好使用原生的js寫業(yè)務(wù)腳本、以提升加載速度、改善用戶體驗(yàn)
你設(shè)置他的layoutprames就可以了
FrameLayout.LayoutParams?layoutParams?=?new?FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,?ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(0,0,0,0);//這里動(dòng)態(tài)設(shè)置他的數(shù)值就行了,你說滾動(dòng)設(shè)置,你在滾動(dòng)監(jiān)聽里設(shè)置就行了。
你的意思應(yīng)該是要在java代碼中動(dòng)態(tài)創(chuàng)建控件吧,那可以這樣做
Button btn1 = new Button(this);
btn1.setText(”this is a button”);
btn1.setId(1);//設(shè)置他的ID