Please refer to Android docs to customize lists depending on your needs.
ATableView intends to imitate same object model proposed on UIKit for building tables, so it's not only limited on theming Android ListView. If you've some background on iOS development you may jump over some of the sections below, you'll find a lot of similarities with the native framework.
If not, you should be good with the examples included here and the demo project.
Documentation is a little outdated, please use it only for reference and stay close to the examples included on the demo project. Feel free to submit a bug if you find any issues using it.
@OverridepublicvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ATableViewStyle.Plain & Grouped supported.ATableViewtableView = newATableView(ATableViewStyle.Grouped, this);
// don't forget to set the datasource, otherwise you'll get an exception.// it must be an object extending ATableViewDataSource, or ATableViewDataSourceExt (more on this later).tableView.setDataSource(newSampleATableViewDataSource());
// delegates are optional, it must extend ATableViewDelegate.tableView.setDelegate(newSampleATableViewDelegate());
FrameLayoutcontainer = (FrameLayout)findViewById(android.R.id.content);
container.addView(tableView);
}It's your responsability to implement the required methods when extending ATableViewDataSource. The following are supported:
publicATableViewCellcellForRowAtIndexPath(ATableViewtableView, NSIndexPathindexPath); [Required]
publicintnumberOfRowsInSection(ATableViewtableView, intsection); [Required]
publicintnumberOfSectionsInTableView(ATableViewtableView);More on how this methods works can be found on the iOS UITableViewDataSource Protocol Reference.
@OverridepublicATableViewCellcellForRowAtIndexPath(ATableViewtableView, NSIndexPathindexPath) {
finalStringcellIdentifier = "CellIdentifier";
// ATableViewCellStyle.Default, Subtitle, Value1 & Value2 supported.ATableViewCellStylestyle = ATableViewCellStyle.Default;
// reuse cells. if the table has different row types it will result on performance issues.// Use ATableViewDataSourceExt on this cases.// please notice we ask the datasource for a cell instead the table as we do on ios.ATableViewCellcell = dequeueReusableCellWithIdentifier(cellIdentifier);
if (cell == null) {
cell = newATableViewCell(style, cellIdentifier, MainActivity.this);
// ATableViewCellSelectionStyle.Blue, Gray & None supported. It defaults to Blue.cell.setSelectionStyle(ATableViewCellSelectionStyle.Blue);
}
// set title.cell.getTextLabel().setText("Buenos Aires");
// set detail text. careful, detail text is not present on every cell style.// null references are not as neat as in obj-c.TextViewdetailTextLabel = cell.getDetailTextLabel();
if (detailTextLabel != null) {
detailTextLabel.setText("Argentina");
}
returncell;
}
@OverridepublicintnumberOfRowsInSection(ATableViewtableView, intsection) {
// return number of rows for this section.if (section == 1) {
return4;
}
return2;
}
@OverridepublicintnumberOfSectionsInTableView(ATableViewtableView) {
// defaults to 1.return2;
}All UITableViewStyle styles are supported. These are:
- ATableViewStyle.Plain
- ATableViewStyle.Grouped
You can use cell styles included by default, or extend ATableViewCell to create your own cells.
All UITableViewCellStyles styles are supported. These are:
- ATableViewCellStyle.Default
- ATableViewCellStyle.Subtitle
- ATableViewCellStyle.Value1
- ATableViewCellStyle.Value2
All UITableViewCellSelectionStyle styles are supported These are:
- ATableViewCellSelectionStyle.None
- ATableViewCellSelectionStyle.Blue (Default)
- ATableViewCellSelectionStyle.Gray
imageView is shown automatically when an image is defined for it, otherwise is hidden by default on each cell.
Drawabledrawable = getResources().getDrawable(R.drawable.some_image);
cell.getImageView().setImageDrawable(drawable);Creating custom cells is as simple as extending ATableViewCellStyle and indicate the layout you want your cell to use.
publicclassMyCustomCellextendsATableViewCell {
privateUILabelmCustomLabel;
protectedintgetLayout(ATableViewCellStylestyle) {
// here it goes your custom cell layout.returnR.layout.my_custom_cell;
}
publicMyCustomCell(ATableViewCellStylestyle, StringreuseIdentifier, Contextcontext) {
super(style, reuseIdentifier, context);
mCustomLabel = (UILabel)findViewById(R.id.custom_cell_label);
}
publicUILabelgetCustomLabel() {
returnmCustomLabel;
}
}Adding a delegate to the table is optional. UITableViewDelegate defines many methods to describe how the table should look and behave. Only a few of them are currently supported on ATableViewDelegate. These are:
publicvoiddidSelectRowAtIndexPath(ATableViewtableView, NSIndexPathindexPath);
publicintheightForRowAtIndexPath(ATableViewtableView, NSIndexPathindexPath);@OverridepublicvoiddidSelectRowAtIndexPath(ATableViewtableView, NSIndexPathindexPath) {
// do something when the row is selected. rows are identified by its indexPath.
}
@OverridepublicintheightForRowAtIndexPath(ATableViewtableView, NSIndexPathindexPath) {
// return height size on dip. defaults to 44 if not implemented.return54;
}On the case you need to use different cell styles on the same table, you should extend ATableViewDataSourceExt to avoid performance issues when scrolling. This is necessary since Android ListView uses different pools for reusing cells, a pool for each cell type. ATableViewDataSourceExt is used to specify how many rows and pools should be created to run smoothly.
You'll have additionally to implement the following methods:
publicintnumberOfRowStyles(); [Required]
publicintstyleForRowAtIndexPath(NSIndexPathindexPath); [Required]@OverridepublicintnumberOfRowStyles() {
// number of different rows on the table.return4;
}
@OverridepublicintstyleForRowAtIndexPath(NSIndexPathindexPath) {
// integer identifying the style for a cell at a given indexPath.returnmyOwnImplementationGetStyle(indexPath);
}UILabel uses internally Roboto font, which make labels look-alike in iOS and it's rendered great by Android. Roboto font is available from ICS and above, so it should be included on your project /assets folder in order to make it work for any version.
Both Roboto-Regular.ttf and Roboto-Bold.ttf are included on the demo project. On the case you don't include these files, text will render using the default font available.
Copyright 2012 Diego Acosta - Contact me at diegonake@gmail.com / @nakardo
Released under the Apache 2.0. license.
Roboto font by Google Android - Licensed under the Apache License.
Awesome Android PSD images by slaveoffear.



