How to add click event in blackberry banner ad.
Here is my code:
public class DemonstrationScreen extends MainScreen
{
public DemonstrationScreen()
{
final Bitmap customPlaceholder = Bitmap.getBitmapResource("arrow.png");
Banner bannerAd = new Banner(add.APID,null,10000, customPlaceholder);
bannerAd.setMMASize(Banner.MMA_SIZE_EXTRA_LARGE);
VerticalFieldManager vfm = new VerticalFieldManager
(VerticalFieldManager.NO_VERTICAL_SCROLL
| VerticalFieldManager.NO_VERTICAL_SCROLLBAR
| VerticalFieldManager.USE_ALL_WIDTH);
HorizontalFieldManager hfm = new HorizontalFieldManager
(HorizontalFieldManager.FIELD_HCENTER
| HorizontalFieldManager.FIELD_VCENTER);
hfm.add(bannerAd);
vfm.add(hfm);
add(vfm);
FieldChangeListener listener=new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
if(field==bannerAd){
Dialog.alert("Banner clicked");
}
}};
bannerAd.setChangeListener(listener);
}
}
this is not working. when i click the ad, then its not showing anythig.
I do think this is unexpected/improper usage of Banner.
However you could potentially do this by overriding navigationClick() at Banner:
public class DemonstrationScreen extends MainScreen
{
public DemonstrationScreen()
{
final Bitmap customPlaceholder = Bitmap.getBitmapResource("arrow.png");
Banner bannerAd = new Banner(add.APID,null,10000, customPlaceholder) {
protected boolean navigationClick(int status, int time) {
Dialog.alert("Banner clicked");
return super.navigationClick(status, time);
}
};
bannerAd.setMMASize(Banner.MMA_SIZE_EXTRA_LARGE);
VerticalFieldManager vfm = new VerticalFieldManager
(VerticalFieldManager.NO_VERTICAL_SCROLL
| VerticalFieldManager.NO_VERTICAL_SCROLLBAR
| VerticalFieldManager.USE_ALL_WIDTH);
HorizontalFieldManager hfm = new HorizontalFieldManager
(HorizontalFieldManager.FIELD_HCENTER
| HorizontalFieldManager.FIELD_VCENTER);
hfm.add(bannerAd);
vfm.add(hfm);
add(vfm);
}
}
But since RIM made Banner class final you can not do this. So I think your request has no simple solution. A hard solution would be to "figure out" what field is clicked at the MainScreen level (in navigationClick of MainScreen you can check what field is in focus and do smth).
Related
I want to display an image at the bottom of the screen and make it clickable ,i have created a custom bitmap field ImageButtonField and trying to use it ,but i am getting ImageButtonField cannot be resolved.
public class ImageButtonField extends BitmapField
{
public ImageButtonField(Bitmap image) {
super(image);
}
public ImageButtonField(Bitmap image,Field location) {
//super(image,location);
}
public boolean isFocusable() {
return true;
}
protected boolean navigationClick(int status, int time) {
fieldChangeNotify(0);
return true;
}
protected boolean trackwheelClick(int status, int time) {
fieldChangeNotify(0);
return true;
}
protected boolean keyChar(char character, int status, int time) {
if(Characters.ENTER == character || Characters.SPACE == character) {
fieldChangeNotify(0);
return true;
}
return super.keyChar(character, status, time);
}
}
public NativeScreen() {
super();
LabelField title = new LabelField("Calendar DatePicker",
LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
hrzManager = new HorizontalFieldManager() {
protected void paintBackground(Graphics graphics) {
graphics.setBackgroundColor(0x0007F5ED);
graphics.clear();
super.paint(graphics);
}
};
hrzManager.add(title);
this.add(hrzManager);
//The background image.
backgroundBitmap = Bitmap.getBitmapResource("cryptodemo_jde.png");
// MainScreen mainScreen = new MainScreen(MainScreen.NO_VERTICAL_SCROLL | MainScreen.NO_HORIZONTAL_SCROLL);
VerticalFieldManager verticalFieldManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_HORIZONTAL_SCROLL |
Manager.USE_ALL_HEIGHT | Manager.USE_ALL_WIDTH ) ;
BasicEditField bef = new BasicEditField("To: ","",50,BasicEditField.FILTER_EMAIL);
//The LabelField will show up through the transparent image.
LabelField labelField = new LabelField("This is a label");
HorizontalFieldManager horizontalFieldManager = new HorizontalFieldManager(HorizontalFieldManager.USE_ALL_WIDTH | HorizontalFieldManager.USE_ALL_HEIGHT);
//A bitmap field with a transparent image.
//The background image will show up through the transparent BitMapField image.
ImageButtonField bitmapField = new ImageButtonField(Bitmap.getBitmapResource("pimdemo_jde.png"), Field.FIELD_BOTTOM);
horizontalFieldManager.add(bitmapField);
BitmapField bitmapField1 = new BitmapField(Bitmap.getBitmapResource("attachmentdemo_jde.png"), Field.FIELD_BOTTOM);
horizontalFieldManager.add(bitmapField1);
//Add the fields to the manager.
// verticalFieldManager.add(bef);
// verticalFieldManager.add(labelField);
verticalFieldManager.add(horizontalFieldManager);
//Add the manager to the screen.
this.add(verticalFieldManager);
There's no constructor in your class that lets you do this:
ImageButtonField ImageButtonField bitmapField = new ImageButtonField(Bitmap.getBitmapResource("pimdemo_jde.png"), Field.FIELD_BOTTOM);
The constructor that you're trying to use requires a Bitmap instance and a long primitive (for Field.FIELD_BOTTOM). You should add a constructor with the following signature for your code to work:
public ImageButtonField (Bitmap bitmap, long style){
super(bitmap, style);
}
I have written code to attach a fieldchange listener to a button.The issue is that i want this button centered.I know the code to center a button. The issue is to get code to both center the button and include a fieldchange listener to it. Here are some code snippets:
FieldChangeListener listener = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
ButtonField register = (ButtonField) field;
UiApplication.getUiApplication().pushScreen(new Register());
}
};
ButtonField register = new ButtonField("Register",ButtonField.CONSUME_CLICK);
register.setChangeListener(listener);
add(register);
How can i center this button?
I put two and two together and came up with this:
FieldChangeListener listener = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
ButtonField register = (ButtonField) field;
UiApplication.getUiApplication().pushScreen(new Register());
}
};
ButtonField menu = new ButtonField("Menu", Field.FIELD_HCENTER);
add(menu);
add(new LabelField("New User?",Field.FIELD_HCENTER));
ButtonField register = new ButtonField("Register",ButtonField.CONSUME_CLICK|Field.FIELD_HCENTER);
register.setChangeListener(listener);
add(register);
This piece of code:
ButtonField.CONSUME_CLICK|Field.FIELD_HCENTER
Is what does the trick
After loading the screen If i click on the button directly, the setChangeListener event is not being invoked, rather when the focus is changed to button/hfm, the setChangeListener event is getting called and the desired result is also obtained.
What might be the possible reason and please help me fix this issue...
HorizontalFieldManager hfm = new HorizontalFieldManager();
ButtonField buttonF = new ButtonField(ButtonField.CONSUME_CLICK);
buttonF.setLabel("View Key");
FieldChangeListener listeneronClick = new FieldChangeListener()
{
public void fieldChanged(Field field, int context)
{
System.out.println("in fieldchange");
ButtonField buttononClick = (ButtonField) field;
buttononClick.setLabel("Hide Key");
}
};
hfm.add(buttonF);
buttonF.setChangeListener(listeneronClick);
Thanks in advance.
Try creating your button like the following
ButtonField button = new ButtonField("Ok", ButtonField.CONSUME_CLICK);
ButtonField.CONSUME_CLICK Indicates to the button consume the click event.
Your FieldChangeListener won't do anything because it creates a new button and does not add it to the screen. I'm guessing you just want to change the text on your existing button so try the following code:
HorizontalFieldManager hfm = new HorizontalFieldManager();
final ButtonField buttonF = new ButtonField(ButtonField.CONSUME_CLICK);
buttonF.setLabel("View Key");
FieldChangeListener listeneronClick = new FieldChangeListener(){
public void fieldChanged(Field field, int context)
{
System.out.println("in fieldchange");
buttonF.setLabel("Hide Key");
}
};
hfm.add(buttonF);
buttonF.setChangeListener(listeneronClick);
try calling hfm.setFocus() before adding hfm to the screen manager.
I have a verticalfieldmanager with buttons and below that a browserfield. The problem is that when I scroll vertically in the browserfield the whole layout of the app scrolls with it(!).. I've been looking like a mad man for a sollution but haven't found anything yet. I tried disabling vertical scroll in the app but this only results in not being able to scroll the browserfield/homepage.
Any suggestions?
Thanks
Hope this code helps you: try this;
public class NewsBrowserScreen extends MainScreen implements FieldChangeListener
{
String url="http://www.google.com/news/";
VerticalFieldManager vertical;
BrowserField browserField;
ButtonField click;
public NewsBrowserScreen()
{
createGUI();
}
private void createGUI()
{
click=new ButtonField("Click",Field.FIELD_HCENTER);
click.setChangeListener(this);
add(click);
vertical=new VerticalFieldManager(VERTICAL_SCROLL|VERTICAL_SCROLLBAR|HORIZONTAL_SCROLL|HORIZONTAL_SCROLLBAR)
{
protected void sublayout(int maxWidth, int maxHeight)
{
super.sublayout(Display.getWidth(),250);
setExtent(Display.getWidth(),250);
}
};
vertical.setBackground(BackgroundFactory.createSolidBackground(Color.GREEN));
vertical.setPadding(10, 0, 10, 0);
add(vertical);
}
protected boolean onSavePrompt()
{
return true;
}
public boolean onMenu(int instance)
{
return true;
}
public void fieldChanged(Field field, int context)
{
if(field==click)
{
browserField=new BrowserField();
vertical.add(browserField);
browserField.requestContent(url);
}
}
}
I Get like this below Image;
You can add a VerticalFieldManager to your MainScreen and add your BrowserField to your VerticalFieldManager. You should set style of VerticalFieldManager with VERTICAL_SCROLL | VERTICAL_SCROLLBAR and clear the syle of your MainScreen
Hi please tell me how to make this screen in blackberry.
my data is not adding on it.i took vertical field manager to add all components.
Its working.. I created it for you. use this code
public class home extends UiApplication {
public static void main(String[] args)
{
home app = new home();
app.enterEventDispatcher();
}
MainScreen screen = new MainScreen();
private int deviceWidth = Display.getWidth();
private int deviceHeight = Display.getHeight();
LabelField lbl1 = new LabelField("label");
final Bitmap backgroundBitmap = Bitmap.getBitmapResource("bg1.jpg");
final Bitmap backgroundBitmap1 = Bitmap.getBitmapResource("bg2.jpg");
final BitmapField mybitmapField = new BitmapField(Bitmap.getBitmapResource("facebook-logo.jpg"),DrawStyle.HCENTER);
public home()
{
super();
pushScreen(screen);
VerticalFieldManager mainManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR )
{
public void paint(Graphics graphics)
{
graphics.clear();
graphics.drawBitmap(0, 0, deviceWidth, deviceHeight, backgroundBitmap, 0, 0);
super.paint(graphics);
}
};
//this manger is used for adding the componentes
VerticalFieldManager subManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR )
{
public void paint(Graphics graphics)
{
graphics.clear();
graphics.drawBitmap(0, 0, deviceWidth, deviceHeight, backgroundBitmap1, 0, 0);
super.paint(graphics);
}
};
screen.add(mainManager);
mainManager.add(lbl1);
mainManager.add(subManager);
subManager.add(mybitmapField);
subManager.add(new LabelField("Data 1"));
subManager.add(new LabelField("Data 1"));
subManager.add(new LabelField("Data 1"));
}
}
output will be like this.
Find an example of how to make this screen below:
VerticalFieldManager manager = new VerticalFieldManager();
VerticalFieldManager first = new VerticalFieldManager();
VerticalFieldManager second = new VerticalFieldManager();
first.add(label);
second.add(image);
second.add(data);
second.add(data);
second.add(data);
manager.add(first);
manager.add(second);
add(manager);